如何将Map键转换为数组?

时间:2016-02-11 14:15:32

标签: javascript dictionary ecmascript-6

假设我有以下地图:

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);

必须有更好的方法,不是吗?

7 个答案:

答案 0 :(得分:244)

Map.keys()返回MapIterator个对象,可以使用Array.from将其转换为Array

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

编辑:您还可以使用spread syntax

将可迭代对象转换为数组
let keys =[ ...myMap.keys() ];
// ["a", "b"]

答案 1 :(得分:6)

您可以使用spread运算符转换数组中的 Map.keys() 迭代器。

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

答案 2 :(得分:1)

我需要类似角反应形式的东西:

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');

答案 3 :(得分:1)

好吧,让我们更全面一些,从地图开始,针对那些不了解JavaScript中此功能的人... MDN说:

  

Map对象保存键值对并记住原始值   键的插入顺序。
  任何值(对象和原始值   值)可以用作键或值。

如前所述,您可以使用new关键字轻松创建Map的实例... 就您而言:

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

所以让我们看看...

您提到的方式是可以的,但是,是的,还有更简洁的方式...

Map有许多可用的方法,例如set(),您已经使用它来分配键值...

其中之一是keys(),它将返回所有键...

对于您而言,它将返回:

MapIterator {"a", "b"}

,您可以轻松地使用 ES6 方法将它们转换为数组,例如散布运算符...

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

答案 4 :(得分:1)

这并不是最佳的答案,但是当我既需要键又需要值来生成所需数组时,这种技巧new Array(...someMap)节省了我几次。例如,当需要根据Map和Key和Value值创建React组件时。

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

答案 5 :(得分:0)

Array.from(Map.keys())在Google应用程序脚本中不起作用。

尝试使用它会导致错误TypeError: Cannot find function from in object function Array() { [native code for Array.Array, arity=1] }

要获取GAS中的键列表,请执行以下操作:

var keysList = Object.keys(myMap);

答案 6 :(得分:0)

myMap.map(([x,_]) => {x});

上面也应该起作用