让我们说我们有2个数组,我们想要返回一个包含每个array1 [element] +(数组2中其余元素)的数组,依此类推。
let array1 = ["a","b"];
let array2 = ["e","f"];
let array3 = mergeArrays(array1,array2);// ["ae","af","be","bf"]
// I tried something like this
let output = [];
let x = 0;
for (let i = 0;i< variants.length;i++){
for (let j = 0;j < variants[i].length;j++){
output[x] = variants[i][x] + variants[j][x];
x++;
}
}
答案 0 :(得分:3)
具有两个贴图并展平:
let array1 = ["a","b"];
let array2 = ["e","f"];
let array3 = array1.map(a => array2.map(b => a + b)).flat();
console.log(array3);
答案 1 :(得分:2)
您可以简单地使用嵌套的(...of
)循环来生成两个数组的笛卡尔积:
let array1 = ["a", "b"];
let array2 = ["e", "f"];
function mergeArrays(arr1, arr2) {
let res = [];
for (i of arr1) {
for (j of arr2) {
res.push(i + j);
}
}
return res;
}
let array3 = mergeArrays(array1, array2);
console.log(array3);
答案 2 :(得分:2)
比mbojko's answer还短:
let array1 = ["a","b"];
let array2 = ["e","f"];
let array3 = array1.flatMap(a => array2.map(b => a + b));
console.log(array3);
这使用Array.prototype.flatMap()
方法。
实际上,您可以扩展它以支持任意数量的数组:
function cartesian (reducerFn) {
return function zip (array, ...arrays) {
if (arrays.length === 0) return array;
const values = zip(...arrays);
return array.flatMap(a => values.map(b => reducerFn(a, b)));
};
}
const mergeArrays = cartesian((a, b) => a + b);
let array1 = ["a","b"];
let array2 = ["c","d"];
let array3 = ["e","f"];
let array4 = mergeArrays(array1, array2, array3);
console.log(array4);
答案 3 :(得分:1)
使用ES6:
const array1 = ["a","b"];
const array2 = ["e","f"];
const result = array1.reduce((acc, curr) => {
const product = array2.map(el => curr + el);
acc.push(...product)
return acc;
}, []);
console.log(result);
使用Array.prototype.reduce
遍历第一个数组,foreach项获得第二个数组的乘积,压入累加器,并对第一个数组中的每个元素重复以得到结果。
为了使串联更可预测(在输入不是字符串的情况下),我将使用`${curr}${el}
而不是curr + el
。不过,这取决于您的需求!