[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 {}objreduce 함수 의 초기 값 이며, 초기 값을 제공하지 않으면 첫 번째 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" }


답변

lodash를 사용하십시오 !

const obj = _.keyBy(arrayOfObjects, 'keyName')