Я получил объект 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 ответа
скорее мое
myArray
созданиеmyObject
.
myObject = {}
myObject[item.itemId] = anotherDefinedObject;
Затем
return {...object, ...myObject}
То, чего вы хотите достичь, невозможно с оператором спреда; он работает точно так, как задумано, и функциональность не может быть изменена, поскольку JS не допускает перегрузки операторов. Лучше всего пройти через myArr и добавить каждый элемент массива к объекту, используя свой собственный код.
Постскриптум Как отмечается в комментариях, в будущем вы должны действительно предоставить больше примеров вашего ввода, текущего результата и вашего предполагаемого результата; было довольно трудно следовать без него.
const obj = {key1: 1};
const myArr = [{key2: 2}];
myArr.forEach(val => Object.assign(obj, val));
console.log(obj); // {key1: 1, key2: 2}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.