Первый элемент с карты на 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', {}]