1. 程式人生 > 實用技巧 >js多個(N)個數組的的元素組合排序演算法

js多個(N)個數組的的元素組合排序演算法

現在有一批手機,其中顏色有['白色','黑色','金色','粉紅色'];記憶體大小有['16G','32G','64G','128G'],版本有['移動','聯通','電信'],要求寫一個演算法,實現[['白色','16G','移動'], ['白色','16G','聯通'] ...]這樣的組合,一個數組裡麵包含若干個陣列,進行組合

寫法1:

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)

寫法2:

// 執行組合排列的函式
    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));