使用遞歸進行數組的每一項的組合(結合)

需求:數組中的每一項都要混合數組

例如(這裏的數組長度不固定,子集的children也是不固定的): arr = [ { name: "顏色", children: [ { text: "紅色" }, { text: "藍色" } ] }, { name: "型號", children: [ { text: "A級" }, { text: "B級" }, { text: "C級" } ] }, { name: "尺寸", children: [ { text: "L" }, { text: "XL" }, { text: "XXL" } ] }oop

須要的輸出的結果: 
[遞歸

["紅色", "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"]it

]io

本身的解決方案:console

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);function

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 = arrindex; // 獲取到當前遍歷到的某個具體的元素 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); } } }遍歷

相關文章
相關標籤/搜索