为什么JavaScript会更改整个array列的值? [英] Why JavaScript changes values of whole the array column?
本文介绍了为什么JavaScript会更改整个array列的值?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试创建一个特定尺寸的2D数组-26x2.我正在用2 for循环来做. 然后,我尝试更改某些元素,但它会更改整个数组列.
I'm trying to create a 2D array of certain dimensions - 26x2. I'm doing it with 2 for loops. Then I try to change certain element but it changes whole the array column.
有人可以解释为什么会发生吗?
Can anybody explain why it happens?
function convertTable() {
var colsNum = 2;
var rowsNum = 26;
var rowCounter = [];
for (var i = 0; i < colsNum; i++) {
rowCounter.push(0);
}
var counterArray = [];
var colCounter = rowCounter;
for (var i = 0; i < rowsNum; i++) {
counterArray.push(colCounter);
}
document.write(counterArray);
document.write("<br>");
counterArray[0][0] = 1;
counterArray[0][1] = 2;
counterArray[1][0] = 10;
counterArray[1][1] = 20;
document.write(counterArray);
}
<!DOCTYPE html>
<html>
<body onload="convertTable()"></body>
</html>
推荐答案
for (var i = 0; i < rowsNum; i++) {
counterArray.push(colCounter);
}
您在这里所做的是将相同的引用重复推送到您的行,因此您的2D数组如下所示:
What you are doing here is pushing the same reference to your row repeatedly, so your 2D array looks like this:
| ref#1 |
| ref#1 | ref#1 = [0, 0, ..., 0]
...
| ref#1 |
但是,您真正想要的是这样的东西:
What you actually want, however, is something like this:
| ref#1 | ref#1 = [0, 0, ..., 0]
| ref#2 | ref#2 = [0, 0, ..., 0]
...
| ref#26 | ref#26 = [0, 0, ..., 0]
因此,在将其推入之前,您应该创建一个新数组:
And therefore, you should create a new array before you push it in:
var colsNum = 2;
var rowsNum = 26;
var matrix = []
for(var row = 0; row < rowsNum; row++) {
var rowArray = []
for(var col = 0; col < colsNum; col++) {
rowArray.push(0);
}
matrix.push(rowArray);
}
这篇关于为什么JavaScript会更改整个array列的值?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文