létrehozása osztály Iterable szögeltérés / géppel

szavazat
1

Létrehoztam egy osztály szögletes, most, amikor letölti az objektum egy boltban előfizetés, bár ez adja vissza egy tömbben tárgy, de nem tudom használni foreach hurok a visszaadott objektum.

Igen, én használtam Object.keys (felhasználó) .forEach () {..} Úgy működik, de azt akarom, hogy nem ugyanaz a dolog azáltal osztály Iterable. Hogyan ezt.

Minta kód: -

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

Előre is köszönöm...

A kérdést 24/08/2018 11:47
a forrás felhasználó
Más nyelveken...                            


3 válasz

szavazat
2

Annak érdekében, hogy az osztálya legyen iterable, az osztály szüksége van egy módszer 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);
}

Ebben az esetben én egy függvény.

Válaszolt 24/08/2018 12:16
a forrás felhasználó

szavazat
1

Használhatja for inüzemeltetője:

class User {
  // 
}

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

Ezen felül, akkor ellenőrizze, hogy az osztály fokon a propsaját tulajdonaként user.hasOwnProperty(prop)belül a for inhurok. Például, ha az Userosztály utódja a másik alap osztályt, és ellenőrzés nélkül hasOwnPropertylátni fogja a constructoris:

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

Látni fogja öt riasztás: x, y, a, b, constructor.

Válaszolt 24/08/2018 12:10
a forrás felhasználó

szavazat
-1

Valami ilyesmi ?

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));
Válaszolt 24/08/2018 11:59
a forrás felhasználó

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