Javascript/Typescript: 使用 map/reduce 从其他数组生成新数组?
Javascript/Typescript: Generate new arrays from other arrays with map / reduce?
两天前我就被这个问题弄疯了。
我有一个数组数组,就像这样(数组的数量可以改变,它们的元素的数量也可以改变,但是为了得到背后的东西让我们假设这个例子):
array = [
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"],
["19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"],
["37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54"]
];
我只想创建一个新数组,其中包含一些如下所示的数组:
result = [
["1", "19", "37"],
["2", "20", 38"],
...
];
我通过一些 foreach 循环得到了这个,但我想知道如何使用 map() 和 reduce() 来做到这一点。
我尝试并得到了一些结果,但离我需要的还很远。
有人可以帮助我吗?
提前致谢,
干杯
您可以迭代数组并更改外部 i
和内部 j
索引以分配实际值。
// v--------v------v
result = array.reduce((r, a, i) => (a.forEach((v, j) => (r[j] = r[j] || [])[i] = v), r), []);
// ^----------------------------------------------^
var array = [["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"], ["19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"], ["37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54"]],
result = array.reduce((r, a, i) => (a.forEach((v, j) => (r[j] = r[j] || [])[i] = v), r), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
显式检查和分配空数组。
var array = [["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"], ["19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"], ["37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54"]],
result = array.reduce((r, a, i) => {
a.forEach((v, j) => {
if (!(j in r)) {
r[j] = [];
}
r[j][i] = v;
});
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
两天前我就被这个问题弄疯了。
我有一个数组数组,就像这样(数组的数量可以改变,它们的元素的数量也可以改变,但是为了得到背后的东西让我们假设这个例子):
array = [
["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"],
["19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"],
["37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54"]
];
我只想创建一个新数组,其中包含一些如下所示的数组:
result = [
["1", "19", "37"],
["2", "20", 38"],
...
];
我通过一些 foreach 循环得到了这个,但我想知道如何使用 map() 和 reduce() 来做到这一点。 我尝试并得到了一些结果,但离我需要的还很远。
有人可以帮助我吗?
提前致谢, 干杯
您可以迭代数组并更改外部 i
和内部 j
索引以分配实际值。
// v--------v------v
result = array.reduce((r, a, i) => (a.forEach((v, j) => (r[j] = r[j] || [])[i] = v), r), []);
// ^----------------------------------------------^
var array = [["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"], ["19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"], ["37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54"]],
result = array.reduce((r, a, i) => (a.forEach((v, j) => (r[j] = r[j] || [])[i] = v), r), []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
显式检查和分配空数组。
var array = [["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18"], ["19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30", "31", "32", "33", "34", "35", "36"], ["37", "38", "39", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "50", "51", "52", "53", "54"]],
result = array.reduce((r, a, i) => {
a.forEach((v, j) => {
if (!(j in r)) {
r[j] = [];
}
r[j][i] = v;
});
return r;
}, []);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }