Website-Suche

javascript - Typescript Filter-Methode


In meiner Angular-2-Anwendung habe ich zwei Objekt-Arrays deklariert.

users: User[];
selectedUsers: User[];

Jetzt verwende ich die filter()-Methode, um ein Array mit Objekten zurückzugeben, deren checked-Eigenschaft wahr ist.

this.selectedUsers = this.users.filter(user => user.isChecked == true);

Das Problem besteht darin, dass die Referenzen für Elemente beider Arrays gleich sind. Gibt es also eine Möglichkeit, die Objekte herauszufiltern und ein Array neuer Objekte (neue Referenz) zurückzugeben?

Antwort #1

Sie können immer Array.prototype.map verwenden, um ein neues Array zu erstellen, und Object.assign, um ein neues Objekt zu erstellen:

this.users.filter(user => user.isChecked).map(u => Object.assign({},u));

Antwort #2

Sie können die Funktion _.cloneDeep (Bibliothek "lodash") verwenden:

Um Lodash in TypeScript zu implementieren, benötigen Sie:

npm i -S lodash

und die @types-Bibliothek :

npm i -S @types/lodash

und in deinem Code:

import * as _ from 'lodash'

let cloneCheckedObject = _.cloneDeep(this.users.filter(user => user.isChecked);