let descartes = this.descartes(selectValues)
console.log('生成的组合', JSON.stringify(descartes))
生成的组合是这样的:["蓝色","6GB","移动"],["蓝色","6GB","联通"],["蓝色","8GB","移动"],["蓝色","8GB","联通"]]
但是选择的时候我选择多个只有第一个会生成多个,后面的只会生成第一个是颜色和版本对应上的,后面的都只会有第一个版本,我需要的就是想上面的组合那样有几个版本就生成几个版本,有几个颜色就生成几个颜色
// parent上一级索引;count指针计数
var point = {}
var result = []
var pIndex = null
var tempCount = 0
var temp = []
// 根据参数列生成指针对象
for (var index in list) {
if (typeof list[index] === 'object') {
point[index] = { parent: pIndex, count: 0 }
pIndex = index
}
}
// 单维度数据结构直接返回
if (pIndex == null) {
return list
}
// 动态生成笛卡尔积
while (true) {
for (let index in list) {
tempCount = point[index]['count']
temp.push(list[index][tempCount])
}
// 压入结果数组
result.push(temp)
temp = []
// 检查指针最大值问题
while (true) {
if (point[index]['count'] + 1 >= list[index].length) {
point[index]['count'] = 0
pIndex = point[index]['parent']
if (pIndex == null) {
return result
}
// 赋值parent进行再次检查
index = pIndex
} else {
point[index]['count']++
break
}
}
另外,该代码看起来有一些可能会引起问题的地方。例如,point 变量定义在函数之外,这可能会导致在不同的调用之间共享该变量,导致不可预期的结果。同时,使用两个嵌套的 while 循环会使代码难以阅读和理解,可以考虑使用更简单的控制结构来实现同样的功能。建议你仔细检查一下这段代码,以确保它可以正确的执行你想要的功能。
不知道你这个问题是否已经解决, 如果还没有解决的话: