我正在为销售T恤的网站制作一个基于JavaScript的购物车系统。当用户将商品添加到购物车时,它会作为具有两个属性(cart
和id
(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)
删除重复项,但无济于事。
希望有一种简单的方法可以完成我想做的事情–我只是一辈子都无法搞清楚。