TypeScript-定制类元素的Array.map

时间:2018-07-18 14:38:52

标签: javascript arrays angular typescript class

自定义类的数组元素出现问题。

我的班级定义为:

export class Alarm {
    id: string;
    name: string;
    time: string;
    days: string[];

    //My custom methods....

    constructor (values: Object = {}){
        Object.assign(this, values);
    }
}

在我的(角度)组件中,我定义了一个警报对象数组

var alarms: Alarm[] = [
    new Alarm({ name: "Alarm 1", time: "06:55", days: ["MO", "TU"] }),
    new Alarm({ name: "Alarm 2", time: "06:56", days: ["MO", "TU"] }),
    new Alarm({ name: "Alarm 3", time: "06:57", days: ["MO", "TU"] }),
    new Alarm({ name: "WAKE UP!", time: "06:58", days: ["MO", "TU"] })
];

如果我检查数组,我会看到所有元素都是Alarm对象。

但是,如果我尝试从ID开始获取警报索引,则使用:

var alarmPosition = this.alarms.map((alarm) => alarm.id == id).indexOf(true);

此指令后,我的数组现在由Object元素填充,因此没有在类中定义任何Alarm方法。

现在,我以为 map 函数不会修改原始数组,即使这样做,为什么我的Alarm对象变成“简单”对象?

1 个答案:

答案 0 :(得分:5)

map将产生新的数组。根据您要查找的内容尝试使用find / filter

// Finds an alarm with given ID
var alarm = this.alarms.find((alarm) => alarm.id === id);

// Finds all alarms with given ID
var alarms = this.alarms.filter((alarm) => alarm.id === id);