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陣列
- JS陣列專題1️⃣ ➖ 陣列扁平化JS陣列
- 回溯法解決全排列問題總結
- php陣列問題PHP陣列
- 一個關於JS解決陣列相乘問題JS陣列
- leetcode題解(陣列問題)LeetCode陣列
- 指標陣列練習排列字串指標陣列字串
- LeetCode 1470. 重新排列陣列LeetCode陣列
- JS專題之陣列去重JS陣列
- JS專題之陣列展開JS陣列
- python力扣刷題記錄——1470. 重新排列陣列Python力扣陣列
- JS陣列JS陣列
- js 中基礎資料結構陣列去重問題JS資料結構陣列
- Python陣列中求和問題Python陣列
- 藍橋杯全排列專題
- js陣列排序JS陣列排序
- js 陣列方法JS陣列
- js偽陣列JS陣列
- PHP陣列轉換為js陣列PHP陣列JS
- 子陣列異或和問題陣列
- 陣列效能問題分析總結陣列
- 陣列累加和問題三連陣列
- vue 陣列和物件渲染問題Vue陣列物件
- 字串排列組合問題字串
- 輸入一個整數陣列,輸出奇偶數相間排列的陣列陣列
- JS陣列去重 – JSON陣列去重陣列JSON
- js 一維陣列轉二維陣列JS陣列
- js 二維陣列轉一維陣列JS陣列
- 陣列(引用型別)複製問題陣列型別
- 陣列和列表的轉換問題陣列
- C++陣列預設初值問題C++陣列
- 最大子陣列問題(Maximum subarray problem)陣列