플레인 오브젝트를 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
'IT' 카테고리의 다른 글
단일 스테이트먼트에서 Java로 실행된 여러 쿼리 (0) | 2022.12.27 |
---|---|
2D 어레이에서의 피크 검출 (0) | 2022.12.27 |
npm 사용자가 설치한 패키지를 나열하는 방법 (0) | 2022.12.07 |
Jinja2 단축형 조건어 (0) | 2022.12.07 |
MySQL INSERT INTO 텍스트에 줄 바꿈 추가 (0) | 2022.12.07 |