假设我有以下地图:
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);
必须有更好的方法,不是吗?
答案 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});
上面也应该起作用