function doCombination(arr) {
var count = arr.length - 1; //陣列長度(從0開始)
var tmp = [];
var totalArr = [];// 總陣列
return doCombinationCallback(arr, 0);//從第一個開始
//js 沒有靜態資料,為了避免和外部資料混淆,需要使用閉包的形式
function doCombinationCallback(arr, curr_index) {
for(val of arr[curr_index]) {
tmp[curr_index] = val;//以curr_index為索引,加入陣列
//當前迴圈下標小於陣列總長度,則需要繼續呼叫方法
if(curr_index < count) {
doCombinationCallback(arr, curr_index + 1);//繼續呼叫
}else{
totalArr.push(tmp);//(直接給push進去,push進去的不是值,而是值的地址)
}
//js 物件都是 地址引用(引用關係),每次都需要重新初始化,否則 totalArr的資料都會是最後一次的 tmp 資料;
oldTmp = tmp;
tmp = [];
for(index of oldTmp) {
tmp.push(index);
}
}
return totalArr;
}
}
//測試陣列
var arr = [
[1,2,3,4,5],
['a','b','c','d'],
['成功', '失敗']
];
//呼叫方法
console.log(doCombination(arr));
複製程式碼
js陣列全排列問題
相關文章
- JavaScript陣列元素全排列JavaScript陣列
- 遞迴解決全排列問題遞迴
- [演算法]全排列類問題演算法
- 全排列價值(數學問題)
- 重新排列陣列陣列
- JS常用陣列操作全解析JS陣列
- JS中的陣列複製問題JS陣列
- 回溯法解決全排列問題總結
- JavaScript陣列升序和降序排列JavaScript陣列
- [CareerCup] 17.6 Sort Array 排列陣列陣列
- php對陣列進行全排列的非遞迴演算法PHP陣列遞迴演算法
- php陣列問題PHP陣列
- JS陣列專題1️⃣ ➖ 陣列扁平化JS陣列
- 指標陣列練習排列字串指標陣列字串
- 一個關於JS解決陣列相乘問題JS陣列
- 金幣陣列問題陣列
- java陣列的問題Java陣列
- 面試題:陣列按列排序的問題面試題陣列排序
- Hive解析Json陣列超全講解HiveJSON陣列
- 陣列轉json後的資料型別問題陣列JSON資料型別
- JS陣列push會覆蓋前面的資料問題JS陣列
- 陣列和指標的問題陣列指標
- 全排列演算法的JS實現演算法JS
- JS專題之陣列展開JS陣列
- JS專題之陣列去重JS陣列
- leetcode題解(陣列問題)LeetCode陣列
- js 中基礎資料結構陣列去重問題JS資料結構陣列
- JS陣列JS陣列
- 請教一個關於全排列的演算法問題?演算法
- 字串全排列字串
- JS陣列去重 – JSON陣列去重陣列JSON
- 陣列效能問題分析總結陣列
- vue 陣列和物件渲染問題Vue陣列物件
- Python陣列中求和問題Python陣列
- 陣列累加和問題三連陣列
- 陣列元素迴圈右移問題陣列
- [基礎問題] 陣列賦值陣列賦值
- 求子陣列的最大和問題陣列