如何实现多维数组的排列组合

2021-05-12  本文已影响0人  辉夜真是太可爱啦

大家都应该逛过淘宝,比方说你要在上面买一台手机,有内存大小 ['16G' , '32G' , '64G' , '128G'],然后颜色 ['黑色' , '白色' , '银色' , '金色'],版本有 ['联通' , '移动' , '电信'],现在,让你算出各种组合情况,可以使用如下这个方法

function doExchange(arr){
        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];
        }
    }

现在让我们来测试下效果

doExchange([['16G' , '32G' , '64G' , '128G'],['黑色' , '白色' , '银色' , '金色'],['联通' , '移动' , '电信']]);

可以看到效果如下


image.png
上一篇下一篇

猜你喜欢

热点阅读