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);