IT

플레인 오브젝트를 ES6 맵으로 변환하는 방법

itgroup 2022. 12. 27. 21:13
반응형

플레인 오브젝트를 ES6 맵으로 변환하는 방법

MDN 문서에서는 이 간단한 내용을 찾을 수 없습니다(그냥 놓쳤을 수도 있습니다).

이게 효과가 있을 줄 알았어.

const map = new Map({foo: 'bar'});

map.get('foo'); // 'bar'

...하지만 첫 줄은 던진다.TypeError: (var)[Symbol.iterator] is not a function

일반 개체에서 지도를 만들려면 어떻게 해야 합니까?먼저 키와 값의 쌍을 배열로 변환해야 합니까?

네, 그.Map컨스트럭터는 키와 값의 쌍을 배열합니다.

Object.entries는 ES2017(19.1.2.5)에서 사용 가능한 새로운 오브젝트 스태틱 메서드입니다.

const map = new Map(Object.entries({foo: 'bar'}));

map.get('foo'); // 'bar'

현재 Firefox 46+ 및 Edge 14+ 이상 버전의 Chrome에 구현되어 있습니다.

이전 환경을 지원해야 하고 변환 옵션이 아닌 경우 Georg에서 권장하는 것과 같은 폴리필을 사용하십시오.

Object.entries = typeof Object.entries === 'function' ? Object.entries : obj => Object.keys(obj).map(k => [k, obj[k]]);

먼저 키와 값의 쌍을 배열로 변환해야 합니까?

아니요, 키와 값의 쌍 어레이를 반복하는 것으로 충분합니다.중간 배열이 생성되지 않도록 하려면 다음을 사용할 수 있습니다.

function* entries(obj) {
    for (let key in obj)
        yield [key, obj[key]];
}

const map = new Map(entries({foo: 'bar'}));
map.get('foo'); // 'bar'

Nils의 답변은 객체를 맵으로 변환하는 방법을 설명하고 있어 매우 유용하다고 생각했습니다.단, OP는 MDN 문서에서 이 정보가 어디에 있는지 궁금하기도 했습니다.처음에 질문을 받았을 때는 없었지만 현재는 Object.entries()의 MDN 페이지의 [Converting a Object to a Map]라는 제목에 다음과 같이 표시되어 있습니다.

객체의 맵으로의 변환

new Map()건설업자는 반복할 수 있는 것을 받아들인다entries.와 함께Object.entries, 쉽게 변환할 수 있습니다.Object로.Map:

const obj = { foo: 'bar', baz: 42 }; 
const map = new Map(Object.entries(obj));
console.log(map); // Map { foo: "bar", baz: 42 }

ES6

객체를 맵으로 변환:

const objToMap = (o) => new Map(Object.entries(o));

맵을 개체로 변환:

const mapToObj = (m) => [...m].reduce( (o,v)=>{ o[v[0]] = v[1]; return o; },{} )

주의: mapToObj 함수는 맵키가 문자열이라고 가정합니다(그렇지 않으면 실패합니다).

const myMap = new Map(
    Object
        .keys(myObj)
        .map(
            key => [key, myObj[key]]
        )
)

또는 lodash toPairs 메서드를 사용할 수 있습니다.

const _ = require('lodash');
const map = new Map(_.toPairs({foo: 'bar'}));

언급URL : https://stackoverflow.com/questions/36644438/how-to-convert-a-plain-object-into-an-es6-map

반응형