【问题标题】:javascript - copy array inside functionjavascript - 在函数内复制数组
【发布时间】:2012-03-07 06:52:56
【问题描述】:

我在使用下一个代码时遇到问题:

test1 = [0,0];
function func(test)
{
    var test2 = new Array();
    for(var i = 0; i < test.length; i++)
    if(test[i] == 0)
    {
        test[i] = 1;
        test2.push(test);
        test[i] = 0;
    }
    return test2;
}
a = func(test1);
document.write(a[0].toString()+"<br/>");
document.write(a[1].toString());

输出是:

0,0
0,0

我已经用控制台检查过:当我在条件内更改 test[i] 时,在 test2.push(test) 之后,test2[test2.length] 也发生了变化。 (为什么?)

是否存在范围问题? 我应该怎么做才能得到这样的输出?

1,0
0,1

谢谢。

【问题讨论】:

  • a = func(test); //what is test here??
  • Upsss... 已更正。它是 test1。

标签: javascript arrays scope copy


【解决方案1】:
  test2.push(test);

这不会创建测试数组的副本,而只是存储对输入数组的新引用。因此,您的所有功能就是存储对同一输入参数的大量引用。如果您想存储真实副本,请使用:

 test2.push( test.slice(0) );

【讨论】:

    【解决方案2】:

    使用slice 创建数组的副本:

    var a = [1,2,3]
    var b = a.slice();
    b[0] = 0;
    a[0] == 1;
    

    【讨论】:

      猜你喜欢
      • 2014-05-06
      • 2021-08-10
      • 1970-01-01
      • 2016-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-16
      • 1970-01-01
      相关资源
      最近更新 更多