我有以下输入
input = [{a:[1,2]}, {b:[3,4]}];
我想使用这个看似
的输入来产生一个产品输出output = [{a:1, b:3},{a:1, b:4},{a:2, b:3},{a:2, b:4}];
输入可以像
一样动态input = [{a:[1]}, {b:[2,4]}, {c:[3,5,6]}];
可以使用Lodash或任何标准库。
答案 0 :(得分:5)
您可以使用迭代和递归方法。
function cartesian(array) {
function c(part, index) {
var k = Object.keys(array[index])[0];
array[index][k].forEach(function (a) {
var p = Object.assign({}, part, { [k]: a });
if (index + 1 === array.length) {
r.push(p);
return;
}
c(p, index + 1);
});
}
var r = [];
c({}, 0);
return r;
}
console.log(cartesian([{ a: [1, 2] }, { b: [3, 4] }]));
console.log(cartesian([{ a: [1] }, { b: [2, 4] }, { c: [3, 5, 6] }]));
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
这是使用递归函数执行此操作的方法。
function generate(data) {
var r = [];
function cartesian(data, n, c) {
if(n == data.length) {
return r.push(Object.assign({}, c));
}
var arr = data[n][Object.keys(data[n])[0]]
for(var i = 0; i < arr.length; i++) {
c[Object.keys(data[n])[0]] = arr[i]
cartesian(data, n + 1, c);
}
}
cartesian(data, 0, {});
return r;
}
var input1 = [{a:[1,2]}, {b:[3,4]}];
var input2 = [{a:[1]}, {b:[2,4]}, {c:[3,5,6]}];
console.log(generate(input1))
console.log(generate(input2))