合并对象并保留它';在javascript中使用加法

合并对象并保留它';在javascript中使用加法,javascript,arrays,optimization,duplicates,array-merge,Javascript,Arrays,Optimization,Duplicates,Array Merge,我的js对象数组结构如下所示 项目=[ { 折扣:27.6, 名称:“弗洛伊·范德沃特”, 价格:230, 数量:3, 应税:662.4 }, { 折扣:122.88, 姓名:'Adriel Abshire II', 价格:256, 数量:6, 应税:1413.12 }, { 折扣:159.66, 名称:“塔比莎·斯特曼”, 价格:887, 数量:2, 应税:1614.34 }, { 折扣:27.6, 名称:“弗洛伊·范德沃特”, 价格:230, 数量:3, 应税:662.4 }, { 折扣:

我的js对象数组结构如下所示

项目=[
{
折扣:27.6,
名称:“弗洛伊·范德沃特”,
价格:230,
数量:3,
应税:662.4
},
{
折扣:122.88,
姓名:'Adriel Abshire II',
价格:256,
数量:6,
应税:1413.12
},
{
折扣:159.66,
名称:“塔比莎·斯特曼”,
价格:887,
数量:2,
应税:1614.34
},
{
折扣:27.6,
名称:“弗洛伊·范德沃特”,
价格:230,
数量:3,
应税:662.4
},
{
折扣:122.88,
姓名:'Adriel Abshire II',
价格:256,
数量:6,
应税:1413.12
},
{
折扣:159.66,
名称:“塔比莎·斯特曼”,
价格:887,
数量:2,
应税:1614.34
},
{
折扣:27.6,
名称:“弗洛伊·范德沃特”,
价格:230,
数量:3,
应税:662.4
},
{
折扣:122.88,
姓名:'Adriel Abshire II',
价格:256,
数量:6,
应税:1413.12
},
{
折扣:159.66,
名称:“塔比莎·斯特曼”,
价格:887,
数量:2,
应税:1614.34
}

]
forEach
回调中返回无效-
isContains
将始终返回false。最好使用按名称索引的对象或贴图,将计算复杂度降低一个数量级-然后可以获取该对象的值以获得所需的数组:

const items=[{折扣:27.6,名称:“Floy Vanderport”,价格:230,数量:3,应税:662.4},{折扣:122.88,名称:“Adriel Abshire II”,价格:256,数量:6,应税:1413.12},{折扣:159.66,名称:“Tabitha Stroman”,价格:887,数量:2,应税:1614.34},{折扣:27.6,名称:“Floy Vanderport”,价格:230,数量:3,应税:662.4},{折扣:122.88,名称:“阿德里尔·阿布希尔二世”,价格:256,数量:6,应税价格:1413.12},{折扣:159.66,名称:“塔比莎·斯特里曼”,价格:887,数量:2,应税价格:1614.34},{折扣:27.6,名称:“弗洛伊·范德沃尔特”,价格:230,数量:3,应税价格:662.4},{折扣:122.88,名称:“阿德里尔·阿布希尔二世”,价格:256,数量:6,应税价格:159.66,名称:“塔比莎·斯特里曼”“,价格:887,数量:2,应税价格:1614.34}];
功能挤压(项目){
const squisheditembyname=items.reduce((a,{name,…props})=>{
如果(!a[名称]){
a[name]={name};
}
Object.entries(props.forEach)([prop,val])=>{
a[姓名][道具]=(a[姓名][道具]| | 0)+val;
});
返回a;
}, {});
返回Object.values(squishedItemsByName);
}
控制台日志(挤压(项目))试试看

项目=[
{
折扣:27.6,
名称:“弗洛伊·范德沃特”,
价格:230,
数量:3,
应税:662.4
},
{
折扣:122.88,
姓名:'Adriel Abshire II',
价格:256,
数量:6,
应税:1413.12
},
{
折扣:159.66,
名称:“塔比莎·斯特曼”,
价格:887,
数量:2,
应税:1614.34
},
{
折扣:27.6,
名称:“弗洛伊·范德沃特”,
价格:230,
数量:3,
应税:662.4
},
{
折扣:122.88,
姓名:'Adriel Abshire II',
价格:256,
数量:6,
应税:1413.12
},
{
折扣:159.66,
名称:“塔比莎·斯特曼”,
价格:887,
数量:2,
应税:1614.34
},
{
折扣:27.6,
名称:“弗洛伊·范德沃特”,
价格:230,
数量:3,
应税:662.4
},
{
折扣:122.88,
姓名:'Adriel Abshire II',
价格:256,
数量:6,
应税:1413.12
},
{
折扣:159.66,
名称:“塔比莎·斯特曼”,
价格:887,
数量:2,
应税:1614.34
}
]
设h={};
items.forEach(x=>h[x.name]=!h[x.name]?x:{
折扣:h[x.name]。折扣+x.折扣,
姓名:x.name,
价格:x.price,
数量:h[x.name]。数量+x.quantity,
应纳税:h[x.name]。应纳税+x.应纳税
});
让result=Object.keys(h.map)(k=>h[k]);

控制台日志(结果)执行此操作的多种方法之一可能是:

const uniqueItems = Object.values(
    items.reduce((hashMap, item) => { 
        if (!hashMap[item.name]) {
            hashMap[item.name] = { ...item };
        } else {
            // You should use a safest way to add 
            hashMap[item.name].discount += item.discount;
            hashMap[item.name].price += item.price;
            hashMap[item.name].quantity += item.quantity;
            hashMap[item.name].taxable += item.taxable;
        }

        return hashMap;
    }, {})
)

@CertainPerformance我刚刚编辑并放置了我正在使用的代码。@CertainPerformance这就是我想要的,谢谢。
const uniqueItems = Object.values(
    items.reduce((hashMap, item) => { 
        if (!hashMap[item.name]) {
            hashMap[item.name] = { ...item };
        } else {
            // You should use a safest way to add 
            hashMap[item.name].discount += item.discount;
            hashMap[item.name].price += item.price;
            hashMap[item.name].quantity += item.quantity;
            hashMap[item.name].taxable += item.taxable;
        }

        return hashMap;
    }, {})
)