问答

现在有如下数据格式,我想转换为这样

作者:admin 2021-05-06 我要评论

let skuList = [ { "stock": 10, "stockWarningValue": 2, "attrValList": [{ "skuKeyId": "712957877970780160", "skuKey": "颜色", "skuValId": "123", "val":...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)
let skuList = [
            {
            "stock": 10,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "123",
                "val": "红色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "1011",
                "val": "500ml"
            }]
        }, 
        {
            
            "stock": 200,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "123",
                "val": "红色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "789",
                "val": "200ml"
            }],
        }, 
        {
            "stock": 20,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "456",
                "val": "黑色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "1011",
                "val": "500ml"
            }],
        }, 
        {
            "stock": 200,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "456",
                "val": "黑色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "789",
                "val": "200ml"
            }],
        },
        ]

我想转换为

        let skuAttrList = [{
            "attrName": "颜色",//这里面是所有的颜色
            "attrValList": [{
                "skuValId": "123",
                "skuVal": "红色"
            }, {
                "skuValId": "456",
                "skuVal": "黑色"
            }]
        }, {
            "attrName": "尺寸",//这里面是所有的尺寸
            "attrValList": [{
                "skuValId": "789",
                "skuVal": "200ml"
            }, {
                "skuValId": "1011",
                "skuVal": "500ml"
            }]
        }],

这个skuList 是动态的
如果skuList为

let skuList = [
            {
            "stock": 10,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "123",
                "val": "红色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "1011",
                "val": "500ml"
            },
            {//新增的对象
                "skuKeyId": "545412",
                "skuKey": "品牌",
                "skuValId": "965",
                "val": "奢华"
            },
            ]
        }, 
        {
            
            "stock": 200,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "123",
                "val": "红色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "789",
                "val": "200ml"
            },
             {//新增的对象
                "skuKeyId": "545412",
                "skuKey": "品牌",
                "skuValId": "1545",
                "val": "普通"
            },
            ],
        }, 
        {
            "stock": 20,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "456",
                "val": "黑色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "1011",
                "val": "500ml"
            },
              {//新增的对象
                "skuKeyId": "545412",
                "skuKey": "品牌",
                "skuValId": "564",
                "val": "普通"
            },
            ],
        }, 
        {
            "stock": 200,
            "stockWarningValue": 2,
            "attrValList": [{
                "skuKeyId": "712957877970780160",
                "skuKey": "颜色",
                "skuValId": "456",
                "val": "黑色"
            }, {
                "skuKeyId": "712958011827798016",
                "skuKey": "尺寸",
                "skuValId": "789",
                "val": "200ml"
            },
             {//新增的对象
                "skuKeyId": "545412",
                "skuKey": "品牌",
                "skuValId": "212",
                "val": "vip"
            },
            ],
        },
        ]

那么 skuAttrList 对应的也要加入 品牌的

###
Object.entries(skuList.reduce((res, sku) => {
    sku.attrValList.forEach(v => {
        res[v.skuKey] = res[v.skuKey]||[];
        if(res[v.skuKey].every(o => o.skuValId != v.skuValId)) {
            res[v.skuKey].push({skuValId: v.skuValId, skuVal: v.val})
        }
    })
    return res;
}, {})).map(([attrName, attrValList]) => ({attrName, attrValList}))
###
function group(skuList) {
    const result = {};
    skuList.forEach(({ attrValList }) => {
        attrValList.forEach(attrVal => {
            const { skuKeyId, skuKey, skuValId, val } = attrVal;
            const { attrValList = [] } = result[skuKeyId] || {};
            if(!attrValList.find(item => item.skuValId === skuValId)) {
                attrValList.push({ skuValId, val});
                result[skuKeyId] = {
                    attrName: skuKey,
                    attrValList
                }
            }
        })
    })
    return Object.values(result);
}

// TEST
group(skuList);

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 现在有如下数据格式,我想转换为这样

    现在有如下数据格式,我想转换为这样

  • iterm2使用homebrew安装软件,下载进度

    iterm2使用homebrew安装软件,下载进度

  • 有如下数组,我想转换格式为这样,怎么

    有如下数组,我想转换格式为这样,怎么

  • Golang 中如何执行带参的 curl 命令?

    Golang 中如何执行带参的 curl 命令?

腾讯云代理商
海外云服务器