使用数组的此for循环似乎无法在javascript中工作?

时间:2019-03-17 08:01:28

标签: javascript arrays for-loop overwrite async.js

我正在尝试循环,但似乎我在这里错过了一块: 在这段代码中,我两次使用相同的array []。

我将整个array []复制到数组的第一个位置[[]]

然后我覆盖数组[]

并将带有新值的整个array []复制到array [[]]

的第二个位置

但是

由于某些原因,第一位置也发生了改变??????

这是我的期望:65,44,12,4,23,42

这就是我得到的:4,23,42,4,23,42

我认为这可能是由于JS的异步功能引起的,但是如果您有更好的解释和解决方案...

非常感谢

var numbers = [65, 44, 12, 4, 23, 42];

function pippo() {

  var k = 3;
  var colonne = [];
  var riga = [
    []
  ];

  for (j = 1; j < k + 1; j++) {
    y = 0 * k + j - 1;
    colonne[j - 1] = numbers[y];
  }

  riga[0] = colonne;

  for (j = 1; j < k + 1; j++) {
    y = 1 * k + j - 1;
    colonne[j - 1] = numbers[y];
  }

  riga[1] = colonne;

  demo.innerHTML = riga[0].concat(riga[1]);
}

-------------------这是完整的代码。这个想法是为了进行实验,以对nmbers数组进行分块。

这里是整个代码:

<!DOCTYPE html>
<html>
<body>

<button onclick="pippo()">Try it</button>

<p>Updated array: <span id="demo"></span></p>


<script>
var numbers = [65, 44, 12, 4, 23 , 42];

function pippo() {

var k = 3;
var colonne = [];
var riga = [[]];


for (j=1;j<k+1;j++ ){
        y = 0*k+j-1;
        colonne[j-1] = numbers[y];
}

riga[0] = colonne;

for (j=1;j<k+1;j++ ){
        y = 1*k+j-1;
        colonne[j-1] = numbers[y];
}

riga[1] = colonne;

demo.innerHTML = riga[0].concat(riga[1]);   

}


</script>

</body>
</html>

//-------------------the original outer loop:

for (w = 0 ;w < (numbers.length)/k ;w++) {

for (j=1;j<k+1;j++ ){
        y = w*k+j-1;
        colonne[j-1] = numbers[y];
}

riga[w] = colonne;

}

2 个答案:

答案 0 :(得分:0)

以下几行是导致riga[0]riga[1]引用相同的数组colonne

riga[0] = colonne;
riga[1] = colonne;

您应使用Object.assign()来创建colonne的副本,如下所示

riga[0] = Object.assign([],colonne)

var numbers = [65, 44, 12, 4, 23, 42];

function pippo() {

  var k = 3;
  var colonne = [];
  var riga = [[]];

  for (j = 1; j < k + 1; j++) {
    y = 0 * k + j - 1;
    colonne[j - 1] = numbers[y];
  }

  riga[0] = Object.assign([], colonne)

  for (j = 1; j < k + 1; j++) {
    y = 1 * k + j - 1;
    colonne[j - 1] = numbers[y];
  }

  riga[1] = colonne

  demo.innerHTML = riga[0].concat(riga[1]);

}
pippo()
<p id="demo"></p>

答案 1 :(得分:0)

完成之后:

riga[0] = colonne;

...确保创建一个新数组:

colonne = [];

...,然后继续下一个循环。否则,您将修改在那里的现有colonne数组,这与riga[0]相同。