尝试复制数组时会导致错误

时间:2016-10-03 15:31:35

标签: javascript arrays

我正在尝试复制数组,但是我一直遇到问题。我已经用两种不同的方式尝试过,但都没有用。

第一次尝试:

function classA(id, arrayFrom, arrayTo)
{
  this.id = id;
  this.from = arrayFrom.slice(0);
  this.to = arrayTo.slice(0);
};

输出:

  

未捕获的TypeError:arrayFrom.slice不是函数

第二次尝试:

function classA(id, arrayFrom, arrayTo)
{
  this.id = id;
  this.from = {arrayFrom[0], arrayFrom[1], arrayFrom[2]};
  this.to = {arrayTo[0], arrayTo[1], arrayTo[2]};
};

输出:

  

未捕获的SyntaxError:意外的令牌[

3 个答案:

答案 0 :(得分:0)

您可以使用真实数组初始化您的实例。然后它可以正常工作。

function classA(id, arrayFrom, arrayTo) {
    this.id = id;
    this.from = arrayFrom.slice(0);
    this.to = arrayTo.slice(0);
}

var aFrom = [1, 2, 3],
    aTo = [42, 43, 44],
    a = new classA(0, aFrom, aTo);

aFrom[0] = 100;
console.log(a); // the instance does not change to 100

答案 1 :(得分:0)

如果您使用“数组类似”等可迭代参数(例如节点列表)调用ClassA,那么您可能会喜欢this.from = Array.from(arrayFrom)

function ClassA(id, arrayFrom, arrayTo) {
    this.id = id;
    this.from = Array.from(arrayFrom);
    this.to = Array.from(arrayTo);
}

var obj = new ClassA(1,{0:"a",1:"b",length:2},{length:0});
console.log(obj);

Array.from()即使提供的对象没有迭代器也只有length属性。

答案 2 :(得分:-1)

function classA(id, arrayFrom, arrayTo){
  this.id = id;
  this.from = arrayFrom.slice(0, arrayFrom.length);
  this.to = arrayTo.slice(0, arrayTo.length);
}

让我们尝试一下:) 但是你的函数没有复制数组...我只是写你的代码;)