javascript 如何将Map键转换为数组?

kyks70gy  于 2023-06-20  发布在  Java
关注(0)|答案(7)|浏览(197)

假设我有以下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);

一定有更好的办法,不是吗?

bqjvbblv

bqjvbblv1#

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

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

编辑:你也可以使用spread syntax将可迭代对象转换为数组

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

hmtdttj42#

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

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

8zzbczxx3#

好了,让我们更全面一点,从什么是Map开始,为那些不知道JavaScript中这个功能的人...... MDN说:
Map对象保存键-值对并记住键的原始插入顺序。
任何值(对象和原始值)都可以用作键或值。
正如你提到的,你可以很容易地创建一个Map的示例,使用new关键字...在您的案例中:

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

所以让我们看看...
你提到的方法是一个好的方法,但是,是的,有更简洁的方法来做到这一点......

Map有很多方法可以使用,比如set(),你已经用它来分配键值了...

其中一个是keys(),它返回所有的键。
在您的情况下,它将返回:

MapIterator {"a", "b"}

你可以使用ES6方式轻松地将它们转换为数组,比如spread运算符...

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

kpbwa7wx4#

我需要一些类似于角React形式的东西:

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

zlhcx6iw5#

这个问题并不是最好的答案,但是这个技巧new Array(...someMap)在我需要键和值来生成所需的数组时节省了我几次。例如,当需要基于键和值从Map对象创建react组件时。

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

oug3syen6#

注意,如果你使用JavaScript对象而不是map,你可以使用Object.keys(object),它将返回一个键数组。文档:link
请注意,JS对象与map不同,不一定可以互换使用!

fnvucqvd

fnvucqvd7#

如果你想提取键并遍历键Map,你可以在一行中完成这两个操作:

for (const i of Object.keys(myMap )) {
       console.log(i)
    }

相关问题