javascript-如何将数组中的每个元素与其他数组中的其他元素合并?

时间:2019-09-17 21:24:32

标签: javascript arrays

让我们说我们有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++;
   }
}

4 个答案:

答案 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。不过,这取决于您的需求!