gpt4 book ai didi

node.js - 异步填充数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:37:24 24 4
gpt4 key购买 nike

我这里有两个数组,用随机数填充其中一个:

var arr1 = [1];
var arr2 = [];

function arr1Filler() {
arr2 = arr1;
setTimeout(function() {
for (var i = 0; i < 3; i++) {
arr1[i] = Math.floor(Math.random()*5);
}
console.log('array 1:');
console.log(arr1);
console.log('array 2:');
console.log(arr2);
}, 500);
}

setInterval(arr1Filler, 1000);

在这个例子中,为什么这两个数组总是相等。换句话说,为什么我会得到这样的结果:

array 1:   
[ 3, 0, 1 ]
array 2:
[ 3, 0, 1 ]
array 1:
[ 0, 2, 3 ]
array 2:
[ 0, 2, 3 ]
array 1:
[ 1, 2, 4 ]
array 2:
[ 1, 2, 4 ]

而不是这样的结果(数组 2 的最后一个值是数组 1 的新值):

array 1:
[ 1 ]
array 2:
[ 3, 0, 1 ]
array 1:
[ 3, 0, 1 ]
array 2:
[ 0, 2, 3 ]
array 1:
[ 0, 2, 3 ]
array 2:
[ 1, 2, 4 ]

我应该怎样做才能得到我期望的第二个结果?

最佳答案

它们是相同的,因为您在此处将数组设置为相同对象:

arr2 = arr1;

因此,当您添加到 arr1 时,arr2 始终相同。您想要的是 arr1副本。您可以使用 slice 有效地复制数组。

arr2 = arr1.slice();

var arr1 = [1];
var arr2 = [];

function arr1Filler() {
arr2 = arr1.slice();
setTimeout(function() {
for (var i = 0; i < 3; i++) {
arr1[i] = Math.floor(Math.random()*5);
}
console.log('array 1:');
console.log(arr1);
console.log('array 2:');
console.log(arr2);
}, 500);
}

setInterval(arr1Filler, 1000);

关于node.js - 异步填充数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420482/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com