请帮助我处理我的集合,我希望对相同的itemId和类型bundle进行求和,并使用Sale_Order类型的parentId与下面的集合进行求和。
`let item = [{
id: '001',
name: 'A',
qty: 5,
type:'bundle'
},
{
id: '002',
name: 'B',
qty: 5,
parentId: '001'
type:'Sale_Order'
},
{
id: '002',
name: 'B',
qty: 4,
parentId: '001'
type:'Sale_Order'
},
{
id: '003',
name: 'C',
qty: 8,
parentId: '001'
type:'Sale_Order'
},`
我想要这样的收藏。您可以看到相同类型的bundleId为bundle sum sum的itemId,以及另一个具有parenId的项目,其形式为bundle itemId的类型为Sale_Order。
{{1}}
答案 0 :(得分:0)
您可以先使用parentId
检查对象,然后仅使用'Sale_Order'
推送类型。
然后检查项目是否存在相同的id
和相同的type
,如果找到则更新qty
或将实际对象的副本推送到结果集中。
var items = [{ id: '001', name: 'A', qty: 10, type: 'bundle' }, { id: '002', name: 'B', qty: 5, parentId: '001', type: 'Sale_Order' }, { id: '002', name: 'B', qty: 4, parentId: '001', type: 'Sale_Order' }, { id: '003', name: 'C', qty: 8, parentId: '001', type: 'Sale_Order' }, { id: '001', name: 'A', qty: -5, type: 'bundle' }, { id: '002', name: 'B', qty: -5, parentId: '001', type: 'Sale' }, { id: '002', name: 'B', qty: -4, parentId: '001', type: 'Sale' }, { id: '003', name: 'C', qty: -8, parentId: '001', type: 'Sale' }],
result = items.reduce((r, o) => {
if (o.parentId) {
if (o.type === 'Sale_Order') {
r.push(o);
}
return r;
}
let item = r.find(({ id, type }) => o.id === id && o.type === type);
if (item) {
item.qty += o.qty;
} else {
r.push(Object.assign({}, o));
}
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }