實現一個函數`function generateItems(specs)`,接受類似如下的輸入數組(例子):
```javascript
[{"id":"17","caption":"顏色","types":["黑","棕"]},
{"id":"23","caption":"材質","types":["牛皮"]},
{"id":"24","caption":"尺碼","types":["40","41","42"]}]
數組中的每個對象包含id,caption和types三個屬性,其中types是包含複數個字符串的數組
此函數對上述例子輸入應當輸出如下結果:
[{"17":"黑","23":"牛皮","24":"40"},
{"17":"黑","23":"牛皮","24":"41"},
{"17":"黑","23":"牛皮","24":"42"},
{"17":"棕","23":"牛皮","24":"40"},
{"17":"棕","23":"牛皮","24":"41"},
{"17":"棕","23":"牛皮","24":"42"}]
function generateItems(specs){
let mapArray = []
specs.forEach(item=>{
let a = item.types.map(i=>({[item.id]:i}))
mapArray.push(a)
})
let allResult = [],j=0
const result = mapArray.reduce((accArr, currentArr) => {
let result = []
j++
currentArr.forEach(c => {
if (accArr.length) {
accArr.forEach(a => {
let obj={}
a = a.concat(c)
a.forEach(item=>{
for(let key in item){
obj[key] = item[key]
}
})
result.push(a.concat(c))
if (j > mapArray.length-1) {
allResult.push(JSON.parse(JSON.stringify(obj)))
}
})
} else {
result.push([c])
}
})
return result
}, [])
return allResult
}
let arr = [{"id":"17","caption":"顏色","types":["黑","棕"]},
{"id":"23","caption":"材質","types":["牛皮"]},
{"id":"24","caption":"尺碼","types":["40","41","42"]},
{"id":"25","caption":"填充","types":["氣","粉"]},
];
console.log(generateItems(arr))