어떻게 하시겠습니까? 본능적으로 다음과 같이하고 싶습니다.
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]);
// wishful, ignorant thinking
var newMap = myMap.map((key, value) => value + 1); // Map { 'thing1' => 2, 'thing2' => 3, 'thing3' => 4 }
새로운 반복 프로토콜에 대한 문서에서 많은 것을 얻지 못했습니다 .
나는 알고있다 wu.js ,하지만 난 실행 해요 바벨 프로젝트를하지 포함 싶어 Traceur , 그것이 현재에 의존하는 것 같다가 .
또한 fitzgen / wu.js가 내 프로젝트에 어떻게 적용했는지 추출 하는 방법에 대해서도 약간의 단서 가 없습니다 .
내가 여기서 놓친 것에 대한 명확하고 간결한 설명을 좋아할 것입니다. 감사!
답변
그래서 .map
그 자체로는 당신이 관심을 가지는 하나의 가치만을 제공합니다.
// instantiation
const myMap = new Map([
[ "A", 1 ],
[ "B", 2 ]
]);
// what's built into Map for you
myMap.forEach( (val, key) => console.log(key, val) ); // "A 1", "B 2"
// what Array can do for you
Array.from( myMap ).map(([key, value]) => ({ key, value })); // [{key:"A", value: 1}, ... ]
// less awesome iteration
let entries = myMap.entries( );
for (let entry of entries) {
console.log(entry);
}
두 번째 예제에서는 많은 새로운 것을 사용하고 있습니다. … … Array.from
반복 가능한 모든 항목 (사용할 때마다 [].slice.call( )
세트 및지도 포함)을 사용하여 배열로 변환합니다. …지도 , 배열로 강제 변환되면 배열의 배열로 바뀝니다 el[0] === key && el[1] === value;
(기본적으로 위의 예제 맵을 미리 채운 것과 동일한 형식으로).
각 el에 대한 개체를 반환하기 전에 람다의 인수 위치에서 배열의 구조 해제를 사용하여 해당 배열 지점을 값에 할당합니다.
Babel을 사용하는 경우 프로덕션에서 Babel의 브라우저 폴리 필 ( “core-js”및 Facebook의 “regenerator”포함)을 사용해야합니다.
나는 그것이 포함되어 있다고 확신합니다 Array.from
.
답변
Spread 연산자를 사용해야합니다 .
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]);
var newArr = [...myMap].map(value => value[1] + 1);
console.log(newArr); //[2, 3, 4]
var newArr2 = [for(value of myMap) value = value[1] + 1];
console.log(newArr2); //[2, 3, 4]
답변
그냥 사용하십시오 Array.from(iterable, [mapFn])
.
var myMap = new Map([["thing1", 1], ["thing2", 2], ["thing3", 3]]);
var newArr = Array.from(myMap.values(), value => value + 1);
답변
이 기능을 사용할 수 있습니다.
function mapMap(map, fn) {
return new Map(Array.from(map, ([key, value]) => [key, fn(value, key, map)]));
}
용법:
var map1 = new Map([["A", 2], ["B", 3], ["C", 4]]);
var map2 = mapMap(map1, v => v * v);
console.log(map1, map2);
/*
Map { A → 2, B → 3, C → 4 }
Map { A → 4, B → 9, C → 16 }
*/
답변
사용 Array.from
하여 값을 매핑하는 Typescript 함수를 작성했습니다.
function mapKeys<T, V, U>(m: Map<T, V>, fn: (this: void, v: V) => U): Map<T, U> {
function transformPair([k, v]: [T, V]): [T, U] {
return [k, fn(v)]
}
return new Map(Array.from(m.entries(), transformPair));
}
const m = new Map([[1, 2], [3, 4]]);
console.log(mapKeys(m, i => i + 1));
// Map { 1 => 3, 3 => 5 }
답변
실제로 Map
배열로 변환 한 후에도 원래 키로 Array.from
. 첫 번째 항목은 이고 두 번째 항목은 변형 된 배열 을 반환하여 가능합니다 .key
value
const originalMap = new Map([
["thing1", 1], ["thing2", 2], ["thing3", 3]
]);
const arrayMap = Array.from(originalMap, ([key, value]) => {
return [key, value + 1]; // return an array
});
const alteredMap = new Map(arrayMap);
console.log(originalMap); // Map { 'thing1' => 1, 'thing2' => 2, 'thing3' => 3 }
console.log(alteredMap); // Map { 'thing1' => 2, 'thing2' => 3, 'thing3' => 4 }
해당 키 를 첫 번째 배열 항목으로 반환하지 않으면 키 가 손실 Map
됩니다.
답변
지도를 확장하고 싶습니다
export class UtilMap extends Map {
constructor(...args) { super(args); }
public map(supplier) {
const mapped = new UtilMap();
this.forEach(((value, key) => mapped.set(key, supplier(value, key)) ));
return mapped;
};
}
