Поиск объектов в массиве с одинаковым значением свойства

#javascript #angular

#javascript #угловой

Вопрос:

У меня есть массив банковских счетов, которые я получаю из запроса GET.

 <div class="card" *ngFor="let acc of accounts">{{acc.iban}}  ({{acc.currency}})>
  

Массив учетных записей, например, так:

 this.accounts = [
    { iban : '123' , currency: 'EUR' },
    { iban:  '123' , currency: 'USD' },
    { iban:  '234' , currency: 'EUR' }
]
  

Как я могу динамически находить учетные записи с одинаковым iban, удалять одну из них из списка и добавлять удаленную валюту учетной записи в другую учетную запись?

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

 this.accounts = [
    { iban: '123' , currency 'EUR, USD' },
    { iban:  '234' , currency: 'EUR' }
]
  

Ответ №1:

Вы можете использовать Object.values() и Array.prototype.reduce() для объединения учетных записей с одинаковым IBAN и объединения валют через запятую.

С помощью reduce вы выполняете итерацию по своему accounts массиву и создаете промежуточный словарь, который сопоставляет iban объединенные учетные записи, затем с помощью Object.values() вы перечисляете значения словарных записей, чтобы вернуть массив.

 const accounts = [
  { iban : '123' , currency: 'EUR' },
  { iban:  '123' , currency: 'USD' },
  { iban:  '234' , currency: 'EUR' }
];

const result = Object.values(accounts.reduce((acc, { iban, currency }) => {
  acc[iban] = acc[iban]
    ? { ...acc[iban], currency: acc[iban].currency   ', '   currency }
    : { iban, currency };
  return acc;
}, {}));

console.log(result);  

Комментарии:

1. Большое вам спасибо! 🙂