Невозможно напрямую назначить новый экземпляр массива существующему массиву из метода - PullRequest
0 голосов
/ 11 сентября 2018

Проблема проявляется в этом поршне: 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 голосов
/ 11 сентября 2018

Вы правы, что массив передается по ссылке, но вы получаете копию ссылки в вашем методе.Поэтому, когда вы изменяете ссылку, вы изменяете ее копию.Нет таких модификаторов, как out или ref, которые могли бы вам помочь.Я предлагаю вам вернуть новый массив, который вы пытаетесь вернуть через параметр.

...