我试图将多维数组的所有元素组合在一起,以获得元素的组合。
e.g。如果我有
var array = [
['a'],
['1', '2', '3', '4'],
['A']
];
结果必须如下:
["a1A", "a2A", "a3A", "a4A"]
我可以使用以下代码实现此结果:
var finalArray = [];
var f1 = 0;
for (var i = 0; i < array.length - 1; i ++) {
f1 = 0;
for (var j = 0; j < array[i].length; j ++) {
for (var k = 0; k < array[i + 1].length; k ++) {
if (finalArray[f1])
finalArray[f1] += array[i + 1][k];
else
finalArray[f1] = array[i][j] + array[i + 1][k];
f1 ++;
}
}
}
console.log(finalArray);
问题是如果我向第一个或最后一个成员添加更多元素,它将无法按预期工作。
例如这个数组
var array = [
['a', 'b'],
['1', '2', '3', '4'],
['A']
];
返回:
["a1A", "a2A", "a3A", "a4A", "b1", "b2", "b3", "b4"]
应该是:
["a1A", "a2A", "a3A", "a4A", "b1A", "b2A", "b3A", "b4A"]
非常感谢任何修复我的代码的帮助。
答案 0 :(得分:3)
您可以使用迭代和递归方法来获取可变长度的零件及其长度。
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>');