需求:数组中的每一项都要结合
例如(这里的数组长度不固定,子集的children也是不固定的):
arr = [
{
name: "颜色",
children: [
{
text: "红色"
},
{
text: "蓝色"
}
]
},
{
name: "型号",
children: [
{
text: "A级"
},
{
text: "B级"
},
{
text: "C级"
}
]
},
{
name: "尺寸",
children: [
{
text: "L"
},
{
text: "XL"
},
{
text: "XXL"
}
]
}
需要的输出的结果:
[
["红色", "A级", "L"]
["红色", "A级", "XL"]
["红色", "A级", "XXL"]
["红色", "B级", "L"]
["红色", "B级", "XL"]
["红色", "B级", "XXL"]
["红色", "C级", "L"]
["红色", "C级", "XL"]
["红色", "C级", "XXL"]
["蓝色", "A级", "L"]
["蓝色", "A级", "XL"]
["蓝色", "A级", "XXL"]
["蓝色", "B级", "L"]
["蓝色", "B级", "XL"]
["蓝色", "B级", "XXL"]
["蓝色", "C级", "L"]
["蓝色", "C级", "XL"]
["蓝色", "C级", "XXL"]
]
###自己的解决方案:
1.首先去除children是空的元素
function fn(arr) {
var dataArr = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i].children.length) {
var pp = [];
arr[i].children.forEach(item => {
pp.push(item.text);
});
dataArr.push(pp);
}
}
return dataArr;
}
var arr1 = fn(arr);
2.其次声明一个空数组, 将递归生成的每一项添加到新书组内
递归思路:从第一个子元素数组开始循环,判断是否为当前数组的最后一项如果是则停止循环;否则继续递归循环
loop_recursion(0, arr1,'');
console.log(bigArr)
function loop_recursion(index, arr, StyleStr) {
var tempDSC = ''
for (var i = 0; i < arr[index].length; i++) {
var dogStyle = arr[index][i]; // 获取到当前遍历到的某个具体的元素
tempDSC = StyleStr + "," + dogStyle;
if (index + 1 == arr.length) {
// 如果元素数组的最后一项,直接输出
tempDSC= tempDSC.slice(1,tempDSC.length)
tempDSC = tempDSC.split(',')
bigArr.push(tempDSC);
} else {
// 如果还没到最后一项,带着当前组合的部分进行下一元素的玄幻
recursion(index + 1, arr, tempDSC);
}
}
}