在 JavaScript 中使用 map() 合并(压缩)两个不同长度的数组

use*_*479 2 javascript arrays zip dictionary

我试图围绕 map() 方法,在这种情况下使用它来组合(压缩)两个不同长度的数组。我已经检查了以前关于 JavaScript 压缩的问题,但它们主要涉及等长数组。

我有两个数组:

const countries = ['US', 'FR', 'IT']
const area = [100, 105, 110, 115, 120, 125, 130]

let merge = countries.map(function (c) {
    area.map(function (a) {
        return c + a
    // This returns an array of length 3 (prints country + all areas into one array position)
    // However if I create a third array and use push(c + a) here instead then length is 21 (which is what I am trying to achieve). 
    })
})
Run Code Online (Sandbox Code Playgroud)

我是否返回了错误的值?就像我在评论中写的那样,如果我将 (c+a) 打印或推送到另一个数组中,那么我会得到所有 21 种可能的组合。map() 的重点是获得一个新数组,所以我不想推入第三个数组。我还听说嵌套 forEach 循环是不好的做法(如果我无论如何都要去做的话)。

Cer*_*nce 5

.map必然会创建一个新数组,该数组的长度与被迭代的数组的长度相同。因为countries有 3 个项目,所以如果您使用countries.map.

使用.map在这里不起作用,因为您的输入数组的长度都与所需的输出数组的长度相同。要么.push到外部变量,就像您已经知道的那样,要么使用.reduce并推送到累加器:

const countries = ['US', 'FR', 'IT']
const area = [100, 105, 110, 115, 120, 125, 130]

const merged = countries.reduce((merged, c) => {
  area.forEach((a) => {
    merged.push(c + a);
  });
  return merged;
}, []);
console.log(merged);
Run Code Online (Sandbox Code Playgroud)

从长度为 7 和 3 的数组创建长度为 21 的数组的算法必然涉及嵌套循环 - 这没有错。