问题在这个矮子中得到了证明: 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的错误吗?
答案 0 :(得分:0)
您是对的,数组是通过引用传递的,但是您在方法中获得了引用的副本。因此,当您修改引用时,您将修改其副本。没有out
或ref
这样的修饰语可以为您提供帮助。我建议您返回尝试通过参数返回的新数组。