• 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));
  • 相关阅读:
    saltstack笔记
    saltstack学习篇
    tomcat学习篇
    memcache笔记
    sed、awk学习篇
    javascript function call
    jvm性能调优工具
    spring boot 单元测试
    activemq 分布式事务
    sringboot 集成dobbo2.5.3
  • 原文地址:https://www.cnblogs.com/gavinjay/p/13963401.html
Copyright © 2020-2023  润新知