将多个javascript数组合并到一个数组中

时间:2014-06-26 17:40:25

标签: javascript arrays underscore.js

我们说我有一个像这样的阵列数组:

var original = [
    [1, 2, 3],
    ['one', 'two'],
    ['blue', 'black', 'red', 'green']
];

我想将此数组转换为一个大型数组,该数组封装原始数组的每个元素的每个可能组合,使用每个原始数组的索引作为主数组中值的位置。

这是我正在寻找的结果:

[
    [1, 'one', 'blue'],
    [2, 'one', 'blue'],
    [3, 'one', 'blue'],
    [1, 'two', 'blue'],
    [2, 'two', 'blue'],
    [3, 'two', 'blue'],
    [1, 'one', 'black'],
    [2, 'one', 'black'],
    [3, 'one', 'black'],

    // and so on until ...

    [1, 'two', 'green'],
    [2, 'two', 'green'],
    [3, 'two', 'green'] // end
];

Here's what I've tried

// get number of elements that will be in this array
var repeat = _.reduce(original, function (count, options) {
    return count * options.length;
}, 1);

var master = [];

_.each(original, function (options, index) {
    var count = options.length > 0 ? (repeat / options.length) : repeat,
        optionsRepeated = [];

    _(count).times(function () {
        optionsRepeated = optionsRepeated.concat(options)
    });

    master[index] = optionsRepeated;
});

master = _.zip.apply(_, master);
console.log(master);

问题是最终主阵列中的每个组合都不是唯一的,我似乎无法理解如何获得我想要的结果。有任何想法吗?有一个更好的方法吗?

0 个答案:

没有答案