假设我有以下Map:
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);
一定有更好的办法,不是吗?
假设我有以下Map:
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条答案
按热度按时间bqjvbblv1#
Map.keys()
返回一个MapIterator
对象,可以使用Array.from
将其转换为Array
:编辑:你也可以使用spread syntax将可迭代对象转换为数组
hmtdttj42#
您可以使用spread运算符转换Array中的**Map.keys()**迭代器。
8zzbczxx3#
好了,让我们更全面一点,从什么是Map开始,为那些不知道JavaScript中这个功能的人...... MDN说:
Map对象保存键-值对并记住键的原始插入顺序。
任何值(对象和原始值)都可以用作键或值。
正如你提到的,你可以很容易地创建一个Map的示例,使用new关键字...在您的案例中:
所以让我们看看...
你提到的方法是一个好的方法,但是,是的,有更简洁的方法来做到这一点......
Map有很多方法可以使用,比如
set()
,你已经用它来分配键值了...其中一个是
keys()
,它返回所有的键。在您的情况下,它将返回:
你可以使用ES6方式轻松地将它们转换为数组,比如spread运算符...
kpbwa7wx4#
我需要一些类似于角React形式的东西:
zlhcx6iw5#
这个问题并不是最好的答案,但是这个技巧
new Array(...someMap)
在我需要键和值来生成所需的数组时节省了我几次。例如,当需要基于键和值从Map对象创建react组件时。oug3syen6#
注意,如果你使用JavaScript对象而不是map,你可以使用Object.keys(object),它将返回一个键数组。文档:link
请注意,JS对象与map不同,不一定可以互换使用!
fnvucqvd7#
如果你想提取键并遍历键Map,你可以在一行中完成这两个操作: