δημιουργώντας τάξη ως Iterable σε γωνιακή / γραφομηχανή

ψήφοι
1

Έχω δημιουργήσει μια τάξη σε γωνιακή, τώρα όταν φέρω ένα αντικείμενο μέσω συνδρομής κατάστημα, αν και επιστρέφει έναν πίνακα του αντικειμένου, αλλά δεν μπορώ να χρησιμοποιήσω foreach loop για τη επέστρεψε αντικειμένου.

Ναι, έχω χρησιμοποιήσει Object.keys (χρήστη) .forEach () {..} Είναι εργάζεται, αλλά θέλω να κάνω το ίδιο πράγμα κάνοντας τάξη Iterable. Πώς να αυτό.

Δείγμα κώδικα: -

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

Ευχαριστώ εκ των προτέρων...

Δημοσιεύθηκε 24/08/2018 στις 11:47
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
2

Για την τάξη σας να είναι iterable, την τάξη σας πρέπει να έχει μια μέθοδο 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);
}

Σε αυτή την περίπτωση θα χρησιμοποιηθεί μια λειτουργία της γεννήτριας.

Απαντήθηκε 24/08/2018 στις 12:16
πηγή χρήστη

ψήφοι
1

Μπορείτε να χρησιμοποιήσετε το for inχειριστή:

class User {
  // 
}

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

Επιπλέον, μπορείτε να ελέγξετε αν η παρουσία τάξη έχει την propως δική του ιδιοκτησία της user.hasOwnProperty(prop)μέσα στο for inβρόχο. Για παράδειγμα, αν σας Userκατηγορία εκτείνεται μια άλλη βασική κλάση και χωρίς έλεγχο hasOwnPropertyθα δείτε το constructor, καθώς:

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

Θα δείτε πέντε ειδοποιήσεις: x, y, a, b, constructor.

Απαντήθηκε 24/08/2018 στις 12:10
πηγή χρήστη

ψήφοι
-1

Κάτι σαν αυτό ?

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));
Απαντήθηκε 24/08/2018 στις 11:59
πηγή χρήστη

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