(记录)今天面试碰到的一个数组去重的问题

//目标数据源
const goods=[{name:'巴啦啦',goods:'椰汁',price:15},
                 {name:'三只松鼠',goods:'瓜子',price:10},
                 {name:'哇哈哈',goods:'奶茶',price:11},
                {name:'巴啦啦',goods:'苹果',price:15},
                {name:'三只松鼠',goods:'坚果',price:10},
                {name:'哇哈哈',goods:'荔枝',price:11},
                {name:'巴啦啦',goods:'鲜榨',price:11},
                {name:'三只松鼠',goods:'板栗',price:18},
                {name:'哇哈哈',goods:'柠檬',price:5}]
    //展示数据源
     goodsList=[{
           name:'巴啦啦'
           data:[{goods:'椰汁',price:15},
                 {goods:'苹果',price:15},
                {goods:'鲜榨',price:11}]
     }]
     

第一种

var goodsList=[]
    goods.forEach(el=>{
        var obj={
            data:[],
            name:el.name
        }
        var dataobj={
            goods:el.goods,
            price:el.price
        }
        obj.data.push(dataobj)
        goodsList.push(obj)
    })
    var cartData = []
    var newObj = {}
    goodsList.forEach((el,i)=>{
        if(!newObj[el.name]){
            cartData.push(el);
            newObj[el.name] = true;
        }else {
            cartData.forEach(el=>{
                if(el.name===goodsList[i].name){
                    el.data=el.data.concat(goodsList[i].data)
                }
            })
        }
    })

第二种

const goodsList = goods.reduce((acc,val)=>{
        const {name,goods,price}= val
        const dataItem ={ goods,price}
        const nameIndex =acc.findIndex(val=>val.name===name)

        nameIndex === -1 ?(
            acc.push({
                name,
                data:[dataItem]
            })
        ):(
            acc[nameIndex].data.push(dataItem)
        )
        return acc
    },[])
    console.log(goodsList)

第三种

function fun(goods) {
        let goodsList = []
        for(let i = 0;i<goods.length;i++){
            if(!isnameIngoodsList(goods[i].name, goodsList)){
                // 初次添加数据
                const good = {
                    name: goods[i].name,
                    data: [
                        {
                            goods: goods[i].goods,
                            price: goods[i].price
                        }
                    ]
                }
                goodsList.push(good)
            } else {
                // 已经存在
                const data = {
                    goods: goods[i].goods,
                    price: goods[i].price
                }
                const index = getIndex(goods[i].name, goodsList)
                goodsList[index].data.push(data)
            }
        }
        return goodsList
    }

    function isnameIngoodsList(name, goodsList) {
        return goodsList.some((item) => {
            return name === item.name
        })
    }

    function getIndex(name, goodsList){
        for(let i=0;i<goodsList.length;i++){
            if(goodsList[i].name === name)
            {
                return i
            }
        }
        return -1;
    }

    console.log(fun(goods))
发布了56 篇原创文章 · 获赞 8 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_44361433/article/details/90649522