为什么遍历列表时无法识别属性?

时间:2019-08-16 20:40:00

标签: angular typescript

设置

我有一个叫myClass的班级:

export class myClass
{
    name: string;
    age: number;
    city: string;
}

还有另一个名为people的课程:

export class people
{
    name: string;
    age: number;
}

在我的component.ts中,我声明了listMyClass : myClass[];,它是使用API​​中的数据从ngOnInit()填充的。

目标

我想在component.ts中创建一个遍历listMyClass的方法,如果城市与伦敦匹配,它将被添加到people类的列表中。

我认为我可以按照以下方式在ngOnInit()之外写一些东西(我想要创建的方法):

getLondonPeople(){     
    for (let item in listMyClass) {
        if (item.city == "london") {
            //do something
        }
    }

    return listPeople;
}

问题

我在item.city上收到一条错误消息,内容如下:

  

“字符串”类型不存在“城市”属性。

如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

原因

您会收到此错误,因为使用for-in并没有真正遍历您感兴趣的事物。如documentation所述:

  

for...infor...of语句都迭代某些内容。它们之间的主要区别在于它们迭代的内容。

     

for...in语句以任意顺序遍历对象的可枚举属性。

     

for...of语句迭代可迭代对象定义要迭代的值。

解决方案

考虑原因,建议您使用for-of代替for-in,如下所示:

for (let item of listMyClass) ...

更好,要获取所需的物品,请使用filter而不是for-loop,即

this.listMyClass.filter(item => item.city === 'London')

示例

这是我在Stackblitz上为您准备的一个简单示例,以演示建议的解决方案:

https://stackblitz.com/edit/unrecognized-property