首页 > 解决方案 > 如何在javascript中解决此代码?将具有相同值的不同对象组合成单个数组

问题描述

输入

var arr = 
[
  [ 
    Packet { status: 'Apple', count: '2' },
    Packet { status: 'Lion', count: '2' }
   ],
  [
    Packet { status: 'Donkey', count: '2' },
    Packet { status: 'Apple', count: '2' },
    Packet { status: 'Cat', count: '1' }
  ],
  [
    Packet { status: 'Apple', count: '4' },
    Packet { status: 'Cat', count: '2' }
  ]
]

我需要输出为

arr =
 [
    Packet { status: 'Donkey', count: '2' },
    Packet { status: 'Apple', count: '8' },
    Packet { status: 'Cat', count: '3' },
    Packet { status: 'Lion', count: '2' }
  ]

这个怎么解决??被困了一个星期??..................................................... ..................................................

标签: javascriptnode.jsangularecmascript-6

解决方案


您可以使用reduce和获取Object.values对象:

const arr = [[{ status: 'Apple', count: '2' }, { status: 'Lion', count: '2' }], [{ status: 'Donkey', count: '2' }, { status: 'Apple', count: '2' }, { status: 'Cat', count: '1' }], [{ status: 'Apple', count: '4' }, { status: 'Cat', count: '2' }]];

const result = Object.values(arr.flat().reduce((a,
    { status, count }) => ((a[status] ??= { status, count: 0 }).count += +count,
        a), {}));

console.log(result);


推荐阅读