n个数组实现排列组合

命题场景:

现在有一批手机,其中颜色有[‘白色’,‘黑色’,‘金色’];内存大小有[‘16G’,‘32G’,‘64G’],版本有[‘移动’,‘联通’,‘电信’],要求写一个算法,实现[[‘白色’,‘16G’,‘移动’], [‘白色’,‘16G’,‘联通’] …]这样的组合

//数组排列组合方法
          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 this.doExchange(newArr);
            }else{
              return arr[0];
            }
          }


//调用
console.log(this.doExchange([['a', 'b'], [1, 2]]));

在这里插入图片描述

发布了55 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44770377/article/details/104950462