[javascript] JavaScript에서 객체 배열을 하나의 객체로 어떻게 변환합니까?
개체 배열이 있습니다.
[
{ key : '11', value : '1100', $$hashKey : '00X' },
{ key : '22', value : '2200', $$hashKey : '018' }
];
JavaScript로 어떻게 다음과 같이 변환합니까?
{
"11": "1000",
"22": "2200"
}
답변
아마도 다음과 같은 것을 찾고있을 것입니다.
// original
var arr = [
{key : '11', value : '1100', $$hashKey : '00X' },
{key : '22', value : '2200', $$hashKey : '018' }
];
//convert
var result = {};
for (var i = 0; i < arr.length; i++) {
result[arr[i].key] = arr[i].value;
}
console.log(result);
답변
작은 ES6 솔루션은 다음과 같습니다.
var arr = [{key:"11", value:"1100"},{key:"22", value:"2200"}];
var object = arr.reduce(
(obj, item) => Object.assign(obj, { [item.key]: item.value }), {});
console.log(object)
또한 개체 스프레드를 사용하면 다음과 같이 보일 수 있습니다.
var object = arr.reduce((obj, item) => ({...obj, [item.key]: item.value}) ,{});
99 % 더 빠른 또 다른 솔루션은 다음과 같습니다 (jsperf에서 테스트 됨).
var object = arr.reduce((obj, item) => (obj[item.key] = item.value, obj) ,{});
여기서 우리는 쉼표 연산자를 사용하여 쉼표 앞의 모든 표현식을 평가하고 마지막 쉼표 (마지막 쉼표 뒤)를 반환합니다. 따라서 obj
매번 복사하지 않고 새 속성을 할당합니다.
답변
이 작업을 수행하는 기능적 접근 방식이 마음에 듭니다.
var arr = [{ key:"11", value:"1100" }, { key:"22", value:"2200" }];
var result = arr.reduce(function(obj,item){
obj[item.key] = item.value;
return obj;
}, {});
참고 : Last {}
는 obj
reduce 함수 의 초기 값 이며, 초기 값을 제공하지 않으면 첫 번째 arr
요소가 사용됩니다 (아마도 바람직하지 않음).
https://jsfiddle.net/GreQ/2xa078da/
답변
해결하기 위해 노력 이 대답 에 나는 자바 스크립트에서 하나의 객체로 객체의 배열을 변환합니까 어떻게? ,
이렇게해야합니다.
var array = [
{key:'k1',value:'v1'},
{key:'k2',value:'v2'},
{key:'k3',value:'v3'}
];
var mapped = array .map(item => ({ [item.key]: item.value }) );
var newObj = Object.assign({}, ...mapped );
console.log(newObj );
짧막 한 농담:
var newObj = Object.assign({}, ...(array.map(item => ({ [item.key]: item.value }) )));
답변
Object.fromEntries 사용 :
const array = [
{ key: "key1", value: "value1" },
{ key: "key2", value: "value2" },
];
const obj = Object.fromEntries(array.map(item => [item.key, item.value]));
console.log(obj);
답변
최신 JavaScript를 사용하여이 작업을 수행하는 깨끗한 방법은 다음과 같습니다.
const array = [
{ name: "something", value: "something" },
{ name: "somethingElse", value: "something else" },
];
const newObject = Object.assign({}, ...array.map(item => ({ [item.name]: item.value })));
// >> { something: "something", somethingElse: "something else" }