多個(N)個數組的的元素組合排序算法,多維數組的排列組合或多個數組之間的排列組合

算法代碼寫法一:

// 執行組合排列的函數
function doExchange(array){
    var len = arr.length;
    // 當數組大於等於2個的時候
    if(len >= 2){
        // 第一個數組的長度
        var len1 = arr[0].length;
        // 第二個數組的長度
        var len2 = arr[1].length;
        // 2個數組產生的組合數
        var lenBoth = len1 * len2;
        //  申明一個新數組,做數據暫存
        var items = new Array(lenBoth);
        // 申明新數組的索引
        var index = 0;
        // 2層嵌套循環,將組合放到新數組中
        for(var i=0; i<len1; i++){
            for(var j=0; j<len2; j++){
                items[index] = arr[0][i] +"|"+ arr[1][j];
                index++;
            }
        }
        // 將新組合的數組併到原數組中
        var newArr = new Array(len -1);
        for(var i=2;i<arr.length;i++){
            newArr[i-1] = arr[i];
        }
        newArr[0] = items;
        // 執行回調
        return doExchange(newArr);
    }else{
        return arr[0];
    }
}

//執行
var array = [['a', 'b', 'c'], [1, 2, 3], ['x', 'y', 'z']];
var arr1 = [['a','b','c']];

console.log(doExchange(array));

 算法代碼寫法二:

function doExchange(arr, depth){
    for (var i = 0; i < arr[depth].length; i++) {
        result[depth] = arr[depth][i]
        if (depth != arr.length - 1) {
            doExchange(arr, depth + 1)
        } else {
            results.push(result.join('|'))
        }
    }
}
function test(arr){
    results = [];
    result = [];
    doExchange(arr, 0);
    console.log(results.length, results.join(','));
}
garr = [
['a', 'b', 'c'],
['1', '2', '3'],
['x', 'y', 'z'],
]
test(garr)

  算法代碼寫法三:

/*返回組合的數組*/
function doExchange(array){
    var len = arr.length;
    // 當數組大於等於2個的時候
    if(len >= 2){
        // 第一個數組的長度
        var len1 = arr[0].length;
        // 第二個數組的長度
        var len2 = arr[1].length;
        // 2個數組產生的組合數
        var lenBoth = len1 * len2;
        //  申明一個新數組
        var items = new Array(lenBoth);
        // 申明新數組的索引
        var index = 0;
        for(var i=0; i<len1; i++){
            for(var j=0; j<len2; j++){
                if(arr[0][i] instanceof Array){
                    items[index] = arr[0][i].concat(arr[1][j]);
                }else{
                    items[index] = [arr[0][i]].concat(arr[1][j]);
                }
                index++;
            }
        }
        var newArr = new Array(len -1);
        for(var i=2;i<arr.length;i++){
            newArr[i-1] = arr[i];
        }
        newArr[0] = items;
        return doExchange(newArr);
    }else{
        return arr[0];
    }
}

var arr = [['a', 'b', 'c','d'], [1, 2, 3,4], ['x', 'y', 'z'],['魅族手機']];
console.log(doExchange(arr));

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章