在开发商品发布的时候遇到一个需要求n个数组所有组合的问题,具体为商品的属性为一个数组,属性的会有不同,每个属性的属性值也不同,可能是0~N个。
举个例子:假设进了一批手机,手机的属性如下所示:
运行内存:2G、3G、4G、6G
内存:32G、64G、128G、256G
颜色:黑色、红色、白色
如果用户勾选了运行内存 2G 4G ,内存32G 、64G、256G,颜色:黑色,红色。
那么这个商品理论上会有2*3*2=12种情况。然后分别对这12种录入价格,库存等。
现在核心编码问题就是求[2G,4G] [32G,64G,256G] [黑色,红色]的全排列。这个就像乘法分配律的展开式,先求前两项的展开,形成新因子于后面项展开。转化为代码可以是
const textArr=[['a','b','c'],['d','e','f','g'],['h','i']]
const getCombination=(array)=>{
let resultArry=[];
array.forEach((arrItem)=>{
if(resultArry.length===0){
resultArry=arrItem
}else{
const emptyArray=[];
resultArry.forEach((item)=>{
arrItem.forEach((value)=>{
emptyArray.push([...item,value])
})
})
resultArry=emptyArray
}
});
return resultArry;
}
console.log(getCombination(textArr))
实际运用效果,勾选商品属性后,会自动生成所有组合的商品