skape klasse som Iterable i vinkel / script

stemmer
1

Jeg har laget en klasse i kantete, nå når jeg hente en gjenstand via butikken abonnement, selv om den gir en rekke objekt, men jeg kan ikke bruke foreach løkke på den returnerte objektet.

Ja, jeg har brukt Object.keys (bruker) .forEach () {..} Det fungerer, men jeg ønsker å gjøre det samme ved å gjøre klasse Iterable. Hvordan dette.

Eksempelkode: -

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() {... }
}

Takk på forhånd...

Publisert på 24/08/2018 klokken 11:47
kilden bruker
På andre språk...                            


3 svar

stemmer
2

For at klassen skal være iterable, trenger din klasse skal ha en metode for 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);
}

I dette tilfelle brukes I en generator funksjon.

Svarte 24/08/2018 kl. 12:16
kilden bruker

stemmer
1

Du kan bruke for inoperatøren:

class User {
  // 
}

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

I tillegg kan du sjekke om klassen forekomst har propsom sin egen eiendom user.hasOwnProperty(prop)inne i for inloop. For eksempel, hvis din Userklasse strekker en annen base klasse og uten å sjekke hasOwnPropertyvil du se constructorogså:

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);
}

Du vil se fem varsler: x, y, a, b, constructor.

Svarte 24/08/2018 kl. 12:10
kilden bruker

stemmer
-1

Noe sånt som dette ?

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));
Svarte 24/08/2018 kl. 11:59
kilden bruker

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