首页 > 编程语言 >js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合

js多个(N)个数组的的元素组合排序算法,多维数组的排列组合或多个数组之间的排列组合

时间:2022-12-05 10:55:40浏览次数:44  
标签:arr 组合 多个 depth length 数组 var 排列组合

现在有一批手机,其中颜色有['白色','黑色','金色','粉红色'];内存大小有['16G','32G','64G','128G'],版本有['移动','联通','电信'],要求写一个算法,实现[['白色','16G','移动'], ['白色','16G','联通'] ...]这样的组合,扩张,如果后面还有参数,比如再加一个['国行','港版','美版'],不改程序一样可以执行!

通过上面规律可以发现这个算法就是:一个数组里面包含若干个数组,进行组合

算法代码写法一:

// 执行组合排列的函数
    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));

 

转自:https://www.cnblogs.com/linJie1930906722/p/6854517.html

标签:arr,组合,多个,depth,length,数组,var,排列组合
From: https://www.cnblogs.com/Im-Victor/p/16951723.html

相关文章

  • 数组排序,自己内部会调整,数组也是引用类型
    Java的基本数据类型有8种,分别是:byte(位)、short(短整数)、int(整数)、long(长整数)、float(单精度)、double(双精度)、char(字符)和boolean(布尔值)。数组是引用类型 int[] arr2 = {......
  • 03#JS 工具函数:正则表达式匹配字符,替换该字符,支持多个正则表达式替换
    /***替换字符串,默认替换""。传递regExps,一个正则表达式数组。**@paramsource被修剪的字符串*@paramregExps正则表达式,找到匹配的字符串,然后替换掉*@pa......
  • React中的函数组件详解
    转载来自(47条消息)React中的函数组件详解_『荼』的博客-CSDN博客_react函数组件1.创建方式//写法一constHello=(props)=>{return<div>{props......
  • 力扣 leetcode 209. 长度最小的子数组
    问题描述给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返......
  • 如何使用.join()方法用指定分隔符分隔数组为字符串?
    Array.prototype.join()方法.join()方法把数组中的所有元素连接成一个字符串并返回这个字符串。用逗号或指定的分隔符字符串分隔。如果数组只有一个元素,那么将返回该元素而......
  • 数组
    数组数组概述数组是相同类型数据的有序集合。数组描述的是相同类型的若干数据,按照一定的先后次序排列组合而成。其中,每一个数据称作一个数组元素,每个数组元素可......
  • java顺序数组插入元素
    本文主要阐明已知顺序数组,在数组中插入一个数据元素,使其仍然保持有序。  关键是寻找num在原数组中插入的位置;当num在原数组中是最大的情况,num应该插入到原数组的末尾......
  • java中的字符串数组
    本文主要讲述java中的字符串数组字符串数组的声明有如下几种形式://第一种方式:new//注意在String的后面[]中不需要添加字符串数组的长度。否则报错。String[]arr_1......
  • C 字符串指针与字符串数组
    在程序中定义的字符串无论是对于字符串指针还是字符串数组,都会将字符串放到静态存储区在程序开始运行的时候,对于数组来说,先分配内存空间,然后静态存储区中的字符串字面量......
  • select标签如何实现 每个option传递多个值
    设计项目时我们有时候会利用<select> <option value="值1"></option> </select>向服务器传递数据,大多数传递一个值就可以了,有时候会传递多个值,如何实现呢?见......