在 angular/typescript 中创建 class 作为 Iterable
creating class as Iterable in angular/typescript
我在 angular 中创建了一个 class,现在当我通过商店订阅获取一个对象时,虽然它 returns 一个对象数组,但我不能使用 forEach 循环返回的对象。
是的,我已经使用了 Object.keys(user).forEach(){..} 它正在工作,但我想通过制作来做同样的事情class 可迭代。如何做到这一点。
示例代码:-
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() {... }
}
提前致谢...
您可以使用 for in
运算符:
class User {
//
}
const user = new User(/*args*/);
for (let prop in user) {
console.log(prop, user[prop]);
}
此外,您可以检查 class 实例是否在 for in
循环中将 prop
作为自己的 属性 user.hasOwnProperty(prop)
。例如,如果你的 User
class 扩展了另一个基础 class 而没有检查 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
。
为了使您的 class 可迭代,您的 class 需要具有 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);
}
在这种情况下,我使用了生成器函数。
我在 angular 中创建了一个 class,现在当我通过商店订阅获取一个对象时,虽然它 returns 一个对象数组,但我不能使用 forEach 循环返回的对象。
是的,我已经使用了 Object.keys(user).forEach(){..} 它正在工作,但我想通过制作来做同样的事情class 可迭代。如何做到这一点。
示例代码:-
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() {... }
}
提前致谢...
您可以使用 for in
运算符:
class User {
//
}
const user = new User(/*args*/);
for (let prop in user) {
console.log(prop, user[prop]);
}
此外,您可以检查 class 实例是否在 for in
循环中将 prop
作为自己的 属性 user.hasOwnProperty(prop)
。例如,如果你的 User
class 扩展了另一个基础 class 而没有检查 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
。
为了使您的 class 可迭代,您的 class 需要具有 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);
}
在这种情况下,我使用了生成器函数。