假设我有以下地图:

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(键);

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


当前回答

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

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

编辑:你也可以使用扩展语法将可迭代对象转换为数组

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

其他回答

不是最好的答案,但这个技巧新数组(…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对象而不是映射,你可以使用object .keys(object),它将返回一个键数组。文档:链接

注意,JS对象不同于map,不一定可以互换使用!

好的,让我们更全面一点,为那些不了解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(键)