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 循环是不好的做法(如果我无论如何都要去做的话)。
.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 的数组的算法必然涉及嵌套循环 - 这没有错。
| 归档时间: |
|
| 查看次数: |
1197 次 |
| 最近记录: |