Первый элемент с карты на JavaScript ES2015

У меня есть Map:

const m = new Map();
m.set('key1', {})
.
m.set('keyN' {})

Map может содержать 1 или несколько элементов. Можно ли получить первый элемент по индексу без m.get('key1') и без цикла итератора?

like: m.get()[0]

Ответ 1

Используйте Map.prototype.entries, как этот

const m = new Map();
m.set('key1', {})
m.set('keyN', {})

console.log(m.entries().next().value); // [ 'key1', {} ]

Если вы хотите получить первый ключ, используйте Map.prototype.keys, например

console.log(m.keys().next().value); // key1

Аналогично, если вы хотите получить первое значение, вы можете использовать Map.prototype.values, например

console.log(m.values().next().value); // {}

Причиной, по которой мы должны вызывать next() для возвращаемых значений, является то, что все эти функции возвращают iterators. Подробнее об итерационном протоколе здесь.

Ответ 2

Для конкретного примера, о котором вам интересно, деструктурирование было бы идеальным.

let m = new Map();
m.set('key1', {});
m.set('key2', {});

let [[, obj]] = m;

например.

let [pair] = m;
let [key, obj] = pair;

- один из вариантов деструкции, а затем захват значения, но более простым вариантом будет

let [obj] = m.values();

Ответ 3

Кроме того, это верно как для Set, так и для Map: вы можете преобразовать что-либо в Array, а затем получить любой элемент по его индексу. Что-то вроде этого:

let m = new Map();
m.set('key1', {});
m.set('key2', {});

Array.from(m)[0];    // ['key1', {}]