基本上,我需要这样做:将2D数组中每个数组的x元素放入另一个数组的x元素中。
我没有收到任何语法错误,但是我的程序停止运行(但是该行两边的console.logs,只有最上面的一个被记录)。这是我的代码:
for (var i = 0; i < myArray.length; i++) {
for (var j = 0; j < myArray[i].length; j++) {
console.log("Hi")
finishedarray[i].push(myArray[i][j])
console.log("Hi x2")
}
}
我应该如何解决这个问题?
答案 0 :(得分:0)
您要执行的操作称为平面映射。建立flatMap
功能的方法是将reduce
与散布运算符或Array.concat
结合使用,如下所示:
const myArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
const finishedArray = myArray
.reduce((combinedArr, currentArr) => ([...combinedArr, ...currentArr]), []);
console.log(finishedArray); // Prints: [1, 2, 3, 4, 5, 6, 7, 8, 9]
ES5
var myArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
var finishedArray = myArray
.reduce(function (combinedArr, currentArr) {
return combinedArr.concat(currentArr);
}, []);
console.log(finishedArray); // Prints: [1, 2, 3, 4, 5, 6, 7, 8, 9]
var myArray = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
];
var finishedArray = myArray.flat();
console.log(finishedArray); // Prints: [1, 2, 3, 4, 5, 6, 7, 8, 9]
您的代码也应该可以解决一些错误。代码中的问题是,您尝试将条目推入finishedarray[i]
-但是您有一个空数组,并且访问位置为i
,该位置返回undefined
。只需直接推送到数组即可:
for (var i = 0; i < myArray.length; i++) {
for (var j = 0; j < myArray[i].length; j++) {
finishedarray.push(myArray[i][j]); // removed the "[i]" part in front of ".push"
}
}
for (var arr of myArray) {
for (var entry of arr) {
finishedarray.push(entry);
}
}
编辑:添加了Array.flat。感谢您对此的评论!