数组去重-累加数量

需求:
* 购物车内有几个相同的物品
* 现在我想将相同的数据去重只保留一个并向1其中添加value = 2 or 1(数量属性)

let buyCart_2 = [
        {name:"ipad",price:100,value:0},
        {name:"iphone",price:10000,value:0},
        {name:"xiaomi",price:3000,value:0},
        {name:"xiaomi",price:3000,value:0},
        {name:"iphone",price:10000,value:0},
        {name:"iphone",price:10000,value:0},
        {name:"iphone",price:10000,value:0},
    ]   
    /创建函数
    function rowbuy5(goods){
        //循环数组获取循环次数
        let arr = [];
        goods.forEach(a => {
        goods.forEach((b,index) => {if(a.name == b.name)b.value +=1;});

        let fn = arr.find(({name})=>name == a.name)
        if(!fn)arr.push(a);  
        });
        return arr;
    };console.table(rowbuy5(buyCart_2));

步骤:

1.创建循环先获取元素在其中出现了几次
2.Array.prototype.find()方法返回数组中满足提供的测试函数的第一个元素值,否则返回undfined
第一遍fn的结果应该都是undfined所以将goods数组的第一个元素直接加到新的arr数组中arr[{name:"ipad",price:100,value:0}]当find再次循环到这个元素时就不会再返回undfined而是返回对象本身
即:当数据为空时将数据添加到新数组中,不为空时则不加;最终的返回结果是arr新数组

你可能感兴趣的:(Js,javascript,前端)