TransWikia.com

Сложить значения в объектах с одинаковым ID

Stack Overflow на русском Asked on December 20, 2021

Есть массив:

let users = [{id: 1, balance: 5}, {id:2, balance: 6}, {id: 1, balance: 1}]

Надо чтобы у объектов с одинаковыми id сложился balance, то есть получилось так:

let users = [{id: 1, balance: 6}, {id:2, balance: 6}]

One Answer

Можно, например, такими двумя способами. Первый выглядит проще, но он менее эффективный (множественные прохождения по формируемому массиву). Второй использует промежуточную структуру, но меньше промежуточных операций.

{
  const users = [{id: 1, balance: 5}, {id: 2, balance: 6}, {id: 1, balance: 1}];

  const users1 = users.reduce((acc, entry) => {
    const id = entry.id;
    const same = acc.find( element => element.id === id);

    if (same !== undefined) same.balance += entry.balance;
    else acc.push(entry);

    return acc;
  }, []);

  console.log(users1);
}

{
  const users = [{id: 1, balance: 5}, {id: 2, balance: 6}, {id: 1, balance: 1}];

  const users2 = Object.entries(users.reduce((acc, entry) => {
    const id = entry.id;

    if (acc[id] !== undefined) acc[id] += entry.balance;
    else acc[id] = entry.balance;

    return acc;
  }, {})).map(([id, balance]) => ({ id: Number(id), balance }));

  console.log(users2);
}

Answered by vsemozhebuty on December 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP