다음과 같은지도가 있다고 가정하겠습니다.
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()
MapIterator
를 Array
사용하여 변환 할 수 있는 객체를 반환합니다 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()];