这个for循环使用数组似乎在javascript中不起作用?

问题描述 投票:0回答:2

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

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

然后我覆盖了数组[]

并使用新值将整个数组[]复制到数组[[]]的第二个位置

由于某种原因,第一个位置也改变了??????

这就是我的预期: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]);
}

-------------------这是完整的代码。我们的想法是尝试使用数字数组块。

这里整个代码:

<!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;

}
javascript arrays for-loop overwrite async.js
2个回答
0
投票

你这样做之后:

riga[0] = colonne;

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

colonne = [];

...在继续下一个循环之前。否则你将在那里修改现有的colonne数组,这与riga[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>
© www.soinside.com 2019 - 2024. All rights reserved.