Erstellen Klasse als Iterable in Winkel / Maschinenschrift

stimmen
1

Ich habe eine Klasse in Winkel erstellt, wenn ich jetzt ein Objekt über store Abonnement holen, obwohl es einen Array von Objekt zurückgibt, aber ich kann nicht forEach Schleife auf dem zurückgegebene Objekt verwenden.

Ja, ich habe verwendet Object.keys (user) .forEach () {..} Es funktioniert, aber ich will , indem Klasse Iterable das Gleiche tun. Wie man dies.

Beispielcode:-

class user {
    ...
}
ngOnInit(){
    storeSubsc = this.store.select('users').subscribe(user => {
        this.user = user;
    });
}

login(){
    Object.keys(this.user).forEach()... --> working fine
    I want it like
    this.user.forEach() {... }
}

Danke im Voraus...

Veröffentlicht am 24/08/2018 um 11:47
quelle vom benutzer
In anderen Sprachen...                            


3 antworten

stimmen
2

Damit Ihre Klasse sein iterable, muss Ihre Klasse ein Verfahren haben Symbol.iterator:

class User implements Iterable<string> {
    // ...
    constructor(private username: string, private password: string) { }

    *[Symbol.iterator](): Iterator<string> {
        for (let key of Object.keys(this)) {
            yield key;
        }
    }
}

const u = new User('blabla', '1234');
for (let k of u) {
    console.log(k);
}

In diesem Fall habe ich eine Generatorfunktion.

Beantwortet am 24/08/2018 um 12:16
quelle vom benutzer

stimmen
1

Sie können verwenden for inBetreiber:

class User {
  // 
}

const user = new User(/*args*/); 
for (let prop in user) {
  console.log(prop, user[prop]);
}

Darüber hinaus können Sie überprüfen , ob die Klasseninstanz die hat propals seine eigene Eigenschaft user.hasOwnProperty(prop)innerhalb der for inSchleife. Zum Beispiel, wenn Ihre UserKlasse eine andere Basisklasse erweitert und ohne zu überprüfen , hasOwnPropertywerden Sie das sehen constructorauch:

class BaseUser {
  constructor(public x, public y) { }
}

class User extends BaseUser {
  constructor(public a, public b, public x, public y) {
    super(x, y);
  }
}

const user = new User('12', 2, 111, 222); 
for (let prop in user) {
  alert(prop);
}

Sie werden fünf Warnungen finden Sie unter : x, y, a, b, constructor.

Beantwortet am 24/08/2018 um 12:10
quelle vom benutzer

stimmen
-1

Etwas wie das ?

class User {
  constructor(public id: number, public name: string) {}

  iterate(callBack: Function) {
    return Object.keys(this).forEach(key => callBack(this[key]));
  }

}

const user = new User(1, 'Foo Bar');
user.iterate(item => console.log(item));
Beantwortet am 24/08/2018 um 11:59
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more