[javascript] 지도 키를 배열로 변환하는 방법?

다음과 같은지도가 있다고 가정하겠습니다.

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

더 좋은 방법이 있어야합니까?



답변

Map.keys()MapIteratorArray사용하여 변환 할 수 있는 객체를 반환합니다 Array.from.

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

편집 : 확산 구문을 사용하여 반복 가능한 객체를 배열로 변환 할 수도 있습니다

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


답변

스프레드 연산자를 사용하여 Map.keys () 반복자를 배열 로 변환 할 수 있습니다 .

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


답변

Array.from(myMap.keys()) Google 응용 프로그램 스크립트에서는 작동하지 않습니다.

사용하려고하면 오류가 발생 TypeError: Cannot find function from in object function Array() { [native code for Array.Array, arity=1] }합니다.

GAS에서 키 목록을 얻으려면 다음을 수행하십시오.

var keysList = Object.keys(myMap);


답변

각도 반응 형태와 비슷한 것이 필요합니다.

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


답변

질문에 대한 최상의 대답은 아니지만이 트릭 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"]


답변

자, 좀 더 포괄적으로 가서 JavaScript에서이 기능을 모르는 사람들을위한 지도 를 시작하겠습니다 … MDN의 말 :

Map 객체는 키-값 쌍을 보유하며 키의 원래 삽입 순서를 기억합니다.
모든 값 (객체 및 기본 값 모두)은 키 또는 값으로 사용될 수 있습니다.

언급했듯이 새 키워드를 사용하여 Map 인스턴스를 쉽게 만들 수 있습니다. 귀하의 경우 :

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

그럼 보자 …

당신이 언급 한 방법은 그것을 할 수있는 좋은 방법이지만, 그래, 더 간결한 방법이 있습니다 …

Map 에는 set()이미 키 값을 할당하는 데 사용한 것과 같은 여러 가지 방법이 있습니다 .

그들 중 하나 keys()는 모든 키를 반환하는 것입니다 …

귀하의 경우에는 다음을 반환합니다.

MapIterator {"a", "b"}

스프레드 연산자와 같은 ES6 방식을 사용하여 쉽게 배열로 변환합니다 .

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


답변