javascript - 在嵌套循环中将条目推送到数组中
问题描述
我的代码:
function zeroArray() {
let newArray = [];
let row = [];
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 2; j++) {
row.push(0);
}
newArray.push(row);
}
return newArray
}
console.log(zeroArray())
从我的角度来看,它看起来像结果将是:
[[ 0, 0 ],[ 0, 0, 0, 0 ],[ 0, 0, 0, 0, 0, 0 ]]
但是当代码在控制台中运行时它会显示这个,这是为什么呢?
[ [ 0, 0, 0, 0, 0, 0 ],[ 0, 0, 0, 0, 0, 0 ],[ 0, 0, 0, 0, 0, 0 ] ]
解决方案
function zeroArray() {
let newArray = [];
let row = [];
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 2; j++) {
row.push(0);
}
newArray.push(row); // <== Problematic line
}
return newArray;
}
问题是当您将row
数组推入时newArray
,它实际上并没有将值推入其中;它将指针推送到该数组,这意味着在更新row
数组后,如果再次推送它,它会将相同的值推送到newArray
.
贴出插图进行详细说明:
正如其他人指出的那样,解决方案是每次都重新创建数组,而不是使用相同的变量。例如,解决方案可能是:
function zeroArray() {
const newArray = [];
for (let i = 0; i < 3; i++) {
const row = [];
for (let j = 0; j < 2; j++) {
row.push(0);
}
newArray.push(row); // <== Problematic line
}
return newArray;
}
推荐阅读
- http - 强制浏览器使用部分内容下载大文件
- laravel - Laravel Passport createToken 错误
- ios - 在 Appium 上打开 View Controller 非常慢
- algorithm - 如何对所有尺寸的十五个拼图进行最佳洗牌?
- npm - npm install 期间面临的问题
- java - 计算不是每个元素的除数的数组元素的数量
- javascript - SpyOn 一个模拟的笑话模块没有正确地进行间谍活动
- javascript - Hawk auth 适用于 python 请求,但不适用于 JS Axios
- python - Python 从字符串创建一个模块并运行该模块
- wordpress - 下订单后添加用户和用户元数据 - Woocommerce