在angular / typescript中将类创建为Iterable

时间:2018-08-24 11:47:06

标签: angular typescript iterable

现在,当我通过商店订阅获取对象时,我已经创建了angular的类,尽管它返回了对象数组,但是我无法对返回的对象使用forEach循环。

是的,我使用了 Object.keys(user).forEach(){..} 。它可以工作,但是我想通过使Iterable类来做同样的事情。如何做到这一点。

示例代码:-

a

预先感谢...

3 个答案:

答案 0 :(得分:2)

为了使您的类可迭代,您的类需要使用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);
}

在这种情况下,我使用了生成器函数。

答案 1 :(得分: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

答案 2 :(得分:-2)

Something like this ?

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