Как преобразовать массив объектов в один объект, когда ключи всех объектов одинаковы, а значение может отличаться - PullRequest
0 голосов
/ 08 июля 2020

Я пытаюсь преобразовать:

var arr = [{ "name": "value1" }, { "name": "value2" }, { "name": "value3" }];
var obj = {}; //create the empty output object

arr.forEach(function (item, i) {                                                    
  var key = Object.keys(item)[0]; 
  obj[key] = item[key];  
});                                 

console.log("obj",obj);

это даст мне только последний объект как {name: "value3"}

ожидаемый результат будет:

{ name: "value1", name : "value2", name: "value3" }

Ответы [ 2 ]

0 голосов
/ 08 июля 2020

Символы ES6 могут использоваться как одно и то же имя свойства для объектов. Однако каждый символ уникален. На данный момент единственное решение, которое я смог найти для вашего вопроса, - это использовать символ в качестве ключа. Потому что, как правило, объекты не могут иметь два одинаковых ключа.

Посмотрите, может ли приведенный ниже код помочь.

const arrQuestion = [{ "name": "value1" }, { "name": "value2" }, { "name": "value3" 
}];


const ourObj = {};

arrQuestion.forEach(obj => {
 let symbol = Symbol("name");
 ourObj[symbol] = obj.name;
});

console.log(ourObj);

введите описание изображения здесь

Надеюсь, это поможет :)

0 голосов
/ 08 июля 2020

Согласно приведенному выше комментарию, желаемый объект вывода не может иметь повторяющиеся свойства и вместо этого может находиться в массиве.

const arr = [{ "name": "value1" }, { "name": "value2" }, { "name": "value3" }];

const output = {};

// Iterate through each object in your array
arr.forEach(object => { 
  // For each entry in your object, in this case we only have name
  for(let [key, value] of Object.entries(object)) {
   
    // If the key's value isn't an array, we will assign a new one
    if(!Array.isArray(output[key])) {
      output[key] = [];
    }

    // Push the value to the output object key's array
    output[key].push(value);
  }
});

// Expected { name: ["value1", "value2", "value3"] }
console.log(output);
...