Как объединить несколько объектов - PullRequest
0 голосов
/ 16 июня 2020

Здравствуйте, я новичок в react native, и я хочу объединить данные, используя Object.assign().

Я пробовал использовать простые массивы, и все работает, но мой массив больше, чем массив в одном большом массиве.

Мой код:

    let o1 = getCartData; // [{productId:56, productQuantity:1}, {productId:4, productQuantity:1}]
    let o2 = resultObject; // product with different quantity {productId:56, productQuantity:5}

    let finalObj = Object.assign([], o1, o2);
    console.log('Final', finalObj); // Output ▼["[","{",""","p","r","o","d","u","c","t","I","d",""",":","5","6",",",""","p","r","o","d","u","c","t","Q","u","a","n","t","i","t","y",""",":","1","}","]"]

Я хочу получить этот результат:

console.log('Final', finalObj); // Merged [{productId:56, productQuantity:5}, {productId:4, productQuantity:1}]

Я пробовал на основе этой страницы

Ответы [ 2 ]

1 голос
/ 16 июня 2020

Вы можете сделать это с помощью map и find:

arr1.map(arrObj => arr2.find(arr2Obj => arr2Obj.productId === arrObj.productId) || arrObj);

Что делает этот код:

  • Внутри массива объектов он выполняет итерацию по каждому объекту, здесь каждый объект называется arrObj.
  • Каждому объекту с именем arrObj мы назначаем операцию с помощью оператора стрелки (=>), эта операция будет возвращать значение.
  • Теперь мы используем массив. find (() => {}), который будет искать во втором массиве и будет искать каждый элемент внутри второго массива, и мы помещаем для него условие, если условие истинно, оно вернет значение найденного элемента , в противном случае он вернет null.
  • Мы используем оператор (||), который срабатывает, когда элемент не найден, мы возвращаем сам объект, так как другого объекта с таким же идентификатором не найдено.

Обратите внимание, что этот код работает для сравнения двух массивов, в вашем примере вы пытаетесь сравнить массив с объектом, это можно легко решить, если ваш o2 равен [resultObject] (внутри [скобки] на превратить его в массив).

Получил вот это решение: Замена объектов в массиве

1 голос
/ 16 июня 2020

Вы можете map это, пожалуйста, дайте мне знать, если это то, что вам нужно:

var obj1=[{productId:56, productQuantity:1}, {productId:4, productQuantity:1}];
var obj2={productId:56, productQuantity:5};
var result = obj1.map(({productId, productQuantity})=>({ productId, productQuantity: obj2[`productId`]==productId ? obj2.productQuantity : productQuantity}));
 
 console.log(result);

Или вы можете использовать метод reduce для группировки данных:

var obj1=[{productId:56, productQuantity:1}, {productId:4, productQuantity:1}];
var obj2={productId:56, productQuantity:5};
var result = [...obj1, obj2].reduce((acc, {productId, productQuantity})=>{
    acc[productId] = acc[productId] || {productId, productQuantity};
    acc[productId].productQuantity = productQuantity;
    return acc;
},{});

console.log(Object.values(result));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...