creëren klasse Iterable hoekafwijking / schrijfmachine

stemmen
1

Ik heb een klasse hoekig gemaakt nu ik halen een object via een abonnement opslag, hoewel een reeks object retourneert, maar kan geen gebruik forEach lus aan het geretourneerde object.

Ja, ik heb gebruikt Object.keys (gebruiker) .forEach () {..} Het werkt, maar ik wil hetzelfde doen door het maken van klasse Iterable. How To dit.

Voorbeeldcode:-

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

Bij voorbaat dank...

De vraag is gesteld op 24/08/2018 om 11:47
bron van user
In andere talen...                            


3 antwoorden

stemmen
2

Om uw klasse iterable zijn, je klas moet een methode hebben 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 dit geval heb ik een generatorfunctie.

antwoordde op 24/08/2018 om 12:16
bron van user

stemmen
1

U kunt gebruik maken for inoperator:

class User {
  // 
}

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

Bovendien kunt u controleren of de klasse-instantie heeft het propals zijn eigen woning user.hasOwnProperty(prop)in de for inlus. Bijvoorbeeld, als uw Userklasse breidt een andere basisklasse en zonder controle hasOwnPropertyziet u het constructorook:

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

U ziet vijf waarschuwingen: x, y, a, b, constructor.

antwoordde op 24/08/2018 om 12:10
bron van user

stemmen
-1

Iets zoals dit ?

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));
antwoordde op 24/08/2018 om 11:59
bron van user

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