我们说我有一个像这样的阵列数组:
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
];
// 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);
问题是最终主阵列中的每个组合都不是唯一的,我似乎无法理解如何获得我想要的结果。有任何想法吗?有一个更好的方法吗?