假设我有以下地图:
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(关键); console.log(键);
一定有更好的办法,不是吗?
假设我有以下地图:
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(关键); console.log(键);
一定有更好的办法,不是吗?
当前回答
不是最好的答案,但这个技巧新数组(…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"]
其他回答
好的,让我们更全面一点,为那些不了解JavaScript中这个特性的人从什么是Map开始……MDN说:
Map对象保存键值对并记住原始的键值对 键的插入顺序。 任何值(包括对象和原语) Values)既可以用作键,也可以用作值。
正如你提到的,你可以很容易地创建一个Map的实例使用new关键字… 在你的情况下:
let myMap = new Map().set('a', 1).set('b', 2);
让我看看……
你提到的方法是一种不错的方法,但是是的,还有更简洁的方法来做到这一点……
Map有很多你可以使用的方法,比如set(),你已经用它来分配键值了…
其中之一是keys(),它返回所有的键…
在你的例子中,它将返回:
MapIterator {"a", "b"}
你可以使用ES6的方法轻松地将它们转换为数组,比如展开运算符…
const b = [...myMap.keys()];
我需要类似角反应形式的东西:
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');
可以使用展开操作符转换数组中的Map.keys()迭代器。
let myMap = new Map()。Set ('a', 1).set('b', 2).set(983, true) let keys =[…myMap.keys()] console.log(键)
旁注:如果你使用的是JavaScript对象而不是映射,你可以使用object .keys(object),它将返回一个键数组。文档:链接
注意,JS对象不同于map,不一定可以互换使用!
不是最好的答案,但这个技巧新数组(…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"]