我正在尝试循环,但似乎我在这里错过了一块: 在这段代码中,我两次使用相同的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;
}
答案 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]
相同。