Подтвердить что ты не робот

Как преобразовать ключи карты в массив?

Допустим, у меня есть следующая карта:

let myMap = new Map().set('a', 1).set('b', 2);

И я хочу получить ['a', 'b'] на основе вышеизложенного. Мое текущее решение кажется таким долгим и ужасным.

let myMap = new Map().set('a', 1).set('b', 2);
let keys = [];
for (let key of myMap)
  keys.push(key);
console.log(keys);

Должен быть лучший способ, нет?

4b9b3361

Ответ 1

Map.keys() возвращает объект MapIterator, который можно преобразовать в Array, используя Array.from:

let keys = Array.from( myMap.keys() );
// ["a", "b"]

EDIT: вы также можете преобразовать итерируемый объект в массив, используя синтаксис распространения

let keys =[ ...myMap.keys() ];
// ["a", "b"]

Ответ 2

Вы можете использовать оператор распространения для преобразования итератора Map.keys() в массив.

let myMap = new Map().set('a', 1).set('b', 2).set(983, true)
let keys = [...myMap.keys()]
console.log(keys)

Ответ 3

Array.from(myMap.keys()) не работает в сценариях приложения Google.

Попытка его использования приводит к ошибке TypeError: Cannot find function from in object function Array() { [native code for Array.Array, arity=1] }.

Чтобы получить список ключей в GAS, выполните следующие действия:

var keysList = Object.keys(myMap);

Ответ 4

Мне нужно что-то похожее на угловатую реактивную форму:

let myMap = new Map().set(0, {status: 'VALID'}).set(1, {status: 'INVALID'});
let mapToArray = Array.from(myMap.values());
let isValid = mapToArray.every(x => x.status === 'VALID');

Ответ 5

Не совсем лучший ответ на вопрос, но этот new Array(...someMap) трюк new Array(...someMap) спас меня пару раз, когда мне нужны и ключ, и значение для генерации необходимого массива. Например, когда необходимо создать реагирующие компоненты из объекта Map на основе значений ключа и значения.

  let map = new Map();
  map.set("1", 1);
  map.set("2", 2);
  console.log(new Array(...map).map(pairs => pairs[0])); -> ["1", "2"]

Ответ 6

Хорошо, давайте немного подробнее и начнем с того, что Map для тех, кто не знает эту функцию в JavaScript... MDN говорит:

Объект Map содержит пары ключ-значение и запоминает исходный порядок вставки ключей.
Любое значение (как объекты, так и примитивные значения) может использоваться в качестве ключа или значения.

Как вы упомянули, вы можете легко создать экземпляр Map, используя новое ключевое слово... В вашем случае:

let myMap = new Map().set('a', 1).set('b', 2);

Итак, давайте посмотрим...

То, как вы упомянули, является хорошим способом сделать это, но да, есть более краткие способы сделать это...

В Map есть много методов, которые вы можете использовать, например set() который вы уже использовали для назначения значений ключей...

Одним из них является keys() который возвращает все ключи...

В вашем случае он вернет:

MapIterator {"a", "b"}

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

const b = [...myMap.keys()];