如何使用JS动态组合所有提供的数组

时间:2016-08-18 14:14:16

标签: javascript arrays

我采取这一步骤,以避免一些误解。

简介

让我们说我有两个阵列。

app.config

我需要这两个数组的所有组合只有一个规则,那就是组合应该只是在数组之间,而不是在数组之内。 对于我上面的例子,输出应该是:

var arr1= ['a', 'b', 'c'];
var arr2= ['d', 'e', 'f'];

示例代码:

我测试了这样的代码,它提供了我期待的结果

ad, ae, af, bd, be, bf, cd, ce, cf

这听起来容易,但是我需要一段时间来计算。现在我面临另一个问题,我在经过很长时间后无法解决这个问题。

数组由用户生成。所以在这个简单的两个数组的例子中,上面的代码可以工作但是如果用户说他想要组合3个数组?甚至更多10个阵列?

问题是:

如何动态组合用户提供的所有数组?

5 个答案:

答案 0 :(得分:0)

使用JQuery,extend可以解决问题。

答案 1 :(得分:0)

尝试使用二维数组或数组列表。您将找到您将拥有多少个数组(用户输入或计数器)并创建一个长数组。

然后循环遍历数组数组中的每个数组,并且每个数组循环遍历数组数组中的每个数组后运行或多或少相同的组合.push

答案 2 :(得分:0)

我会在这个

中使用lodash的zip方法

https://lodash.com/docs#zip

答案 3 :(得分:0)

您可以对可变长度的零件及其长度使用迭代和递归方法。

function combine(array) {
    function c(part, index) {
        array[index].forEach(function (a) {
            var p = part.concat(a);
            if (p.length === array.length) {
                r.push(p.join(''));
                return;
            }
            c(p, index + 1);
        });
    }

    var r = [];

    c([], 0);
    return r;
}

var result = combine([['a', 'b', 'c'], ['1', '2', '3', '4'], ['A', 'B']]);

document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

答案 4 :(得分:0)

使用简单的map reduce

'use strict';

let arr1= ['a', 'b', 'c'],
    arr2= ['d', 'e', 'f'];

let r = arr1.map((e) => {
    return arr2.map((f) => {
        return e + f;
    });
}).reduce((a, b) => {
    return a.concat(b);
});

console.log(r);
//Print [ 'ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf' ]