为什么JavaScript会更改整个array列的值? [英] Why JavaScript changes values of whole the array column?

查看:63
本文介绍了为什么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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆