Я получил объект Javascript, который выглядит так:

{
   key1: {
           itemId: "someId",
           myValue: "value"
   },
   key2: {
           itemId: "someId2",
           myValue: "value2"
   }
}

Я также получил массив, в который я помещаю элементы вроде этого:

myArr.push({[item.itemId] : anotherDefinedObject}); //inside a loop on items

Затем я хочу соединить все элементы, которые я поместил в массив, с первым объектом. Это означает, что если бы, например, идентификаторы предметов были «key3» и «key4», я бы получил этот объект:

{
   key1: {
           itemId: "someId",
           myValue: "value"
   },
   key2: {
           itemId: "someId2",
           myValue: "value2"
   },
   key3: { //the object that was added },
   key4: { //the object that was added }
}

Я попытался сделать это с помощью оператора распространения:

return {...object, ...myArr}

Но затем вместо того, чтобы получить то, что мне нужно, я получаю «0», «1» и такие, как ключи в новом объекте (поскольку 0,1 и т. Д. Являются ключами массивов).

Как объединить объект и массив так, как я хочу?

-3
Yonatan Nir 1 Июн 2020 в 15:14

3 ответа

Лучший ответ

скорее мое myArray создание myObject.

myObject = {}
myObject[item.itemId] = anotherDefinedObject;

Затем

return {...object, ...myObject}
1
AZ_ 1 Июн 2020 в 12:33

То, чего вы хотите достичь, невозможно с оператором спреда; он работает точно так, как задумано, и функциональность не может быть изменена, поскольку JS не допускает перегрузки операторов. Лучше всего пройти через myArr и добавить каждый элемент массива к объекту, используя свой собственный код.

Постскриптум Как отмечается в комментариях, в будущем вы должны действительно предоставить больше примеров вашего ввода, текущего результата и вашего предполагаемого результата; было довольно трудно следовать без него.

0
Jacob 1 Июн 2020 в 12:28
const obj = {key1: 1};
const myArr = [{key2: 2}];
myArr.forEach(val => Object.assign(obj, val));

console.log(obj); // {key1: 1, key2: 2}
1
Michael Mishin 1 Июн 2020 в 12:27