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

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 对应的也要加入 品牌的

阅读 1.3k
2 个回答
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);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题