zoukankan      html  css  js  c++  java
  • 求从n个数组任意选取一个元素的所有组合

     最近做项目碰到这个问题,如题从n个数组任意选取一个元素的所有组合。比如已知数组是[1, 3]; [2, 4]; [5]; 最后组合结果是[1, 2, 5]; [1, 4, 5];  [3, 2, 5]; [3, 4, 5];  网上看了好多帖子,发现写的太复杂,于是自己动手解决。

    直接贴解决方案:

    方法一:
     // 执行组合排列的函数
        function doExchange(arr){
            var len = arr.length;
            // 当数组大于等于2个的时候
            if(len >= 2){
                var len1 = arr[0].length;// 第一个数组的长度
                var len2 = arr[1].length; // 第二个数组的长度
                var lenBoth = len1 * len2;// 2个数组产生的组合数
                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']];
        console.log(doExchange(array));
     
    方法二:
      garr = [
            ['a', 'b'],
            ['1', '2', '3'],
            ['x', 'y', 'z'],
        ]

        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('|'))
                }
            }
        }
        test(garr);
        function test(arr){
            results = [];
            result = [];
            doExchange(arr, 0);
            console.log( results.join(","));
        }
     
    当然还有更多解决办法,就总结到这儿吧~
  • 相关阅读:
    Dockerfile基于centos镜像编译安装httpd
    Dockerfile基于centos镜像编译安装nginx
    Dockerfile介绍和常用指令
    Docker存储卷
    正则表达式
    Sed与Awk
    Shell函数
    Shell脚本基础
    Autofs
    Podman
  • 原文地址:https://www.cnblogs.com/chenqianpeng/p/7160647.html
Copyright © 2011-2022 走看看