根据店铺名字分组

购物车原数组
const arr = [{

    shopname: '天猫店铺',
    ischeck: false,
    goodsimg: 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3447506328,3763843571&fm=26&gp=0.jpg',
    goodsname: '芳姐卤香干 600g湖南特产武冈 卤豆腐豆干制品休闲素食零...',
    price: '99.50',
    maxnum: 100,
    num: 1
},
    {
        shopname: '天猫店铺',
        ischeck: false,
        goodsimg: 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3447506328,3763843571&fm=26&gp=0.jpg',
        goodsname: '麻辣王子',
        price: '10.50',
        maxnum: 100,
        num: 1
    },

    {shopname:"淘宝普通店铺"
        ischeck: false,
        goodsimg: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=249803900,574094454&fm=11&gp=0.jpg',
        goodsname: '淘宝普通店铺商品',
        price: '88.40',
        maxnum: 100,
        num: 1
    }

]

怎么变成下面的数组
const arr1 = [

    {
        shopname: '天猫店铺',
        goodslist: [{
            ischeck: false,
            goodsimg: 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3447506328,3763843571&fm=26&gp=0.jpg',
            goodsname: '芳姐卤香干 600g湖南特产武冈 卤豆腐豆干制品休闲素食零...',
            price: '99.50',
            maxnum: 100,
            num: 1
        },
            {
                ischeck: false,
                goodsimg: 'https://ss1.bdstatic.com/70cFvXSh_Q1YnxGkpoWK1HF6hhy/it/u=3447506328,3763843571&fm=26&gp=0.jpg',
                goodsname: '麻辣王子',
                price: '10.50',
                maxnum: 100,
                num: 1
            }
        ]
    },
    {
        shopname: '淘宝普通店铺',
        goodslist: [{
            ischeck: false,
            goodsimg: 'https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=249803900,574094454&fm=11&gp=0.jpg',
            goodsname: '淘宝普通店铺商品',
            price: '88.40',
            maxnum: 100,
            num: 1
        }]

    }
]
阅读 1.8k
3 个回答
function classify(arr) {
    var ret = [];
    loop: for (var i = 0; i < arr.length; ++i) {
        var obj = {}, name = "shopname";
        for (var key in arr[i]) {
            if (key === name) continue;
            obj[key] = arr[i][key];
        }
        for (var j = 0; j < ret.length; ++j) {
            if (arr[i][name] === ret[j][name]) {
                ret[j].goodslist.push(obj);
                continue loop;
            }
        }
        ret.push({
            shopname: arr[i][name],
            goodslist: [obj]
        });
    }
    return ret;
}
console.dir(classify(arr));
let obj = {}
let res = arr.reduce((l, i) => {
    if(obj[i.shopname]){
        obj[i.shopname].goodslist.push(i)
    }else{
        l.push(obj[i.shopname] = {shopname: i.shopname, goodslist: [i]})
    }
    return l
}, [])

可以考虑让后端写一条sql

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题