我正在尝试循环,但似乎我在这里错过了一块:在这段代码中,我使用相同的数组[]两次。
我将整个数组[]复制到数组[[]]的第一个位置
然后我覆盖了数组[]
并使用新值将整个数组[]复制到数组[[]]的第二个位置
但
由于某种原因,第一个位置也改变了??????
这就是我的预期: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;
}
你这样做之后:
riga[0] = colonne;
...确保创建一个新数组:
colonne = [];
...在继续下一个循环之前。否则你将在那里修改现有的colonne
数组,这与riga[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>