合并对象数组中的重复对象并跟踪重复计数

时间:2019-09-09 23:26:37

标签: javascript arrays object reduce

我正在为销售T恤的网站制作一个基于JavaScript的购物车系统。当用户将商品添加到购物车时,它会作为具有两个属性(cartid(T恤尺寸)的对象)添加到variant数组中。

variant属性可跟踪客户选择了哪种尺寸的衬衫。该网站上的某些项目没有尺寸-在这种情况下,variant属性将仅为undefined。以下是一个示例购物车:

var cart = [
    {id: "shirt-a", variant: "S"},
    {id: "shirt-a", variant: "S"},
    {id: "shirt-a", variant: "M"},
    {id: "shirt-a", variant: "S"},
    {id: "shirt-b", variant: "M"},
    {id: "shirt-b", variant: "L"},
    {id: "shirt-b", variant: "M"},
    {id: "merch", variant: undefined},
    {id: "merch", variant: undefined}
];

我想要的是遍历购物车并使输出类似:

out = [
    {id: "shirt-a", variant: "S", amount: 3},
    {id: "shirt-a", variant: "M", amount: 1},
    {id: "shirt-b", variant: "M", amount: 2},
    {id: "shirt-b", variant: "L", amount: 2},
    {id: "merch", variant: undefined, amount: 2},
]

其中删除了重复的条目,并且每个项目的运行总计已添加到输出数组。

到目前为止,我已经可以使用以下filter()函数成功确定每个重复项的数量:

var countOfUniqueItem = cart.filter(function(obj){
    return obj.id === "shirt-a" && obj.variant==="S"
}).length; // returns 3 (3x 'shirt-a')

我可以通过这种方式轻松地将amount属性添加到每个对象,但是如何在此之后删除更多重复项呢?我尝试使用另一个filter函数遍历数组,并使用array.splice(index,1)删除重复项,但无济于事。

希望有一种简单的方法可以完成我想做的事情–我只是一辈子都无法搞清楚。

0 个答案:

没有答案
相关问题