vytvoření třídu jako Iterable v úhlové / typescript

hlasů
1

Vytvořil jsem třídu v úhlové, teď, když jsem načíst objekt přes úložiště předplatného, ​​ačkoli to vrací pole objektu, ale nemohu použít Foreach z vráceného objektu.

Ano, jsem použil Object.keys (user) .forEach () {} .. To funguje, ale chci udělat totéž tím, že třídní Iterable. Jak se to.

Ukázkový 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() {... }
}

Díky předem...

Položena 24/08/2018 v 11:47
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
2

K tomu, aby vaše třída bude iterable, vaše třída musí mít metodu 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);
}

V tomto případě jsem použil funkci generátoru.

Odpovězeno 24/08/2018 v 12:16
zdroj uživatelem

hlasů
1

Můžete použít for inoperátor:

class User {
  // 
}

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

Navíc můžete zkontrolovat, zda je instance třídy má propjako svůj majetek user.hasOwnProperty(prop)uvnitř for insmyčky. Například, pokud vaše Usertřída rozšiřuje jinou základní třídu a bez kontroly, hasOwnPropertyuvidíte constructortaké:

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

Uvidíte pět upozornění: x, y, a, b, constructor.

Odpovězeno 24/08/2018 v 12:10
zdroj uživatelem

hlasů
-1

Něco takového ?

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));
Odpovězeno 24/08/2018 v 11:59
zdroj uživatelem

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