Lil*_*man 165 javascript dictionary ecmascript-6
可以说我有以下地图:
let myMap = new Map().set('a', 1).set('b', 2);
Run Code Online (Sandbox Code Playgroud)
我希望根据以上内容获得['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);
Run Code Online (Sandbox Code Playgroud)
必须有更好的方法,不是吗?
paw*_*wel 327
Map.keys()
返回一个MapIterator
可以转换为Array
使用的对象Array.from
:
let keys = Array.from( myMap.keys() );
// ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
编辑:您还可以使用扩展语法将可迭代对象转换为数组
let keys =[ ...myMap.keys() ];
// ["a", "b"]
Run Code Online (Sandbox Code Playgroud)
Ali*_*eza 15
好吧,让我们更全面地了解一下,对于那些不知道 JavaScript 中的这个功能的人来说,先从什么是Map开始……MDN 说:
Map 对象保存键值对并记住键的原始插入顺序。
任何值(对象和原始值)都可以用作键或值。
正如您所提到的,您可以使用 new 关键字轻松创建 Map 的实例...在您的情况下:
let myMap = new Map().set('a', 1).set('b', 2);
Run Code Online (Sandbox Code Playgroud)
那么让我们看看...
您提到的方法是一种不错的方法,但是是的,还有更简洁的方法可以做到这一点......
Map有许多可以使用的方法,就像set()
您已经用来分配键值的方法一样......
其中之一是keys()
返回所有键......
在你的情况下,它将返回:
MapIterator {"a", "b"}
Run Code Online (Sandbox Code Playgroud)
你可以使用ES6方式轻松将它们转换为数组,例如扩展运算符......
const b = [...myMap.keys()];
Run Code Online (Sandbox Code Playgroud)
Fer*_*jal 11
您可以使用spread运算符转换Array中的Map.keys()迭代器.
let myMap = new Map().set('a', 1).set('b', 2).set(983, true)
let keys = [...myMap.keys()]
console.log(keys)
Run Code Online (Sandbox Code Playgroud)
小智 7
我需要类似于角反应形式的东西:
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');
Run Code Online (Sandbox Code Playgroud)
小智 6
不完全是问题的最佳答案,但当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"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
169944 次 |
最近记录: |