以asynchronous方式填充数组

我有两个数组,填充其中的一个随机数字:

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 ] 

我该怎么做才能得到我期待的第二个结果?

  • 发送回复并继续执行Express |的任务 Node.js的
  • node.jsasynchronous函数的可读性
  • nodejs表示读取文件并asynchronous返回响应
  • node.js async.series不起作用
  • callback已被称为asynchronous并行
  • meteor方法不起作用
  • 由于Nodejs的asynchronous性质而获得空数组
  • 在实时Web应用程序中处理服务器响应的上下文
  • 它们是相同的,因为您在这里将数组设置为相同的对象:

     arr2 = arr1; 

    所以当你添加到arr1arr2总是相同的。 你想要的是一个arr1副本 。 您可以使用slice来有效地创build一个数组的副本。

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