无法将新数组实例直接从方法分配给现有数组

时间:2018-09-11 12:55:11

标签: arrays angular typescript

问题在这个矮子中得到了证明: https://plnkr.co/edit/h1fFuY9VOZDLHO5JAM3o

我知道Typescript中的所有数组都是通过引用传递的。因此应该可以为该引用分配新的数组。

但是我有一个问题。如果我想从Angular 6.1.7(TS 2.9.2)中的方法内部用另一个数组替换,则从方法外部看不到更改。

private assignArray(arrayToReplace: any[], replacement: any[]) {
    arrayToReplace = replacement;
}

我已经找到解决此问题的方法。我没有将源数组分配给目标数组,而是从目标数组中删除了所有条目,并将源数组中的所有条目推入其中。

private replaceArray(arrayToReplace: any[], replacement: any[]) {
    arrayToReplace.splice(0, arrayToReplace.length);
    for(let c of replacement) {
        arrayToReplace.push(c);
    }
}

实际上,此插件的行为很奇怪,因为控制台显示即使在调用replaceArray()方法之前,数组也已更改。

那么这是Angular / Typescript的错误吗?

1 个答案:

答案 0 :(得分:0)

您是对的,数组是通过引用传递的,但是您在方法中获得了引用的副本。因此,当您修改引用时,您将修改其副本。没有outref这样的修饰语可以为您提供帮助。我建议您返回尝试通过参数返回的新数组。