假设我有以下地图:

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

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


当前回答

旁注:如果你使用的是JavaScript对象而不是映射,你可以使用object .keys(object),它将返回一个键数组。文档:链接

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

其他回答

可以使用展开操作符转换数组中的Map.keys()迭代器。

let myMap = new Map()。Set ('a', 1).set('b', 2).set(983, true) let keys =[…myMap.keys()] console.log(键)

我需要类似角反应形式的东西:

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()返回一个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,不一定可以互换使用!