实现一个函数`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))