在具有相同value属性的数组中查找对象

时间:2019-04-01 11:11:51

标签: javascript angular

我有一系列的银行帐户,都是从GET请求中收到的。

func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool
    {
        if tabBarVC?.tabBar.selectedItem?.tag == 5
        {
            tabBarVC?.present(SideMenuManager.default.menuRightNavigationController!, animated: true, completion: nil)
            return false
        }
        return true
    }

帐户数组就是这样的:

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

如何动态查找具有相同iban的帐户,从列表中删除其中一个,然后将删除的帐户的币种添加到另一个帐户?

预期输出为:

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

1 个答案:

答案 0 :(得分: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);