Javascript TypeScript-自定义类元素的Array.map

Javascript TypeScript-自定义类元素的Array.map,javascript,arrays,angular,typescript,class,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); } } 在我的(角度)组件中,我定义了一个

我对自定义类的数组元素有问题

我的班级被定义为:

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"] })
];
如果我检查阵列,我可以看到所有元素都是报警对象

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

var alarmPosition = this.alarms.map((alarm) => alarm.id == id).indexOf(true);
在此指令之后,我的数组现在由对象元素填充,因此没有在类中定义任何报警方法


现在,我认为map函数不会修改原始数组,即使它修改了,为什么我的报警对象会变成“简单”对象?

map
将生成新数组。根据您要查找的内容,尝试使用
find
/
过滤器

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

map
将生成新数组。根据您要查找的内容,尝试使用
find
/
过滤器

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


我知道map返回一个新数组,这里的问题是我的原始数组已经更改,即使我没有将返回值赋给它否-如果您使用
map
,原始数组不会更改,除非您将
map
返回的内容赋给该数组,从我的问题中可以看出,
var alarmPosition=this.alarms.map(…)
不会将返回值分配给原始数组,它会声明一个与此问题无关的新变量,但是。。。这完全取决于所使用的回调:
[{a:1},{a:2}].map((uu,index,array)=>array[index].a++)
@LucaDeNardi-在您的示例中,
报警
对象没有ID-但是您在
映射
中使用它们进行比较。您可以共享类
报警
代码吗?除了您列出的框架外,您是否使用了其他框架?您从哪里获得
警报
阵列?您共享的代码没有修改
报警
数组-我已经验证了该部分。我知道map返回一个新数组,这里的问题是我原来的数组已更改,即使我没有将返回值分配给它否-如果您使用
map
,原始数组也不会改变,除非您将
map
返回的内容分配给该数组,并且从我的问题中可以看出,
var alarmPosition=this.alarms.map(…)
不会将返回值分配给原始数组,它声明了一个新变量,而不是与这个问题无关的变量,但是。。。这完全取决于所使用的回调:
[{a:1},{a:2}].map((uu,index,array)=>array[index].a++)
@LucaDeNardi-在您的示例中,
报警
对象没有ID-但是您在
映射
中使用它们进行比较。您可以共享类
报警
代码吗?除了您列出的框架外,您是否使用了其他框架?您从哪里获得
警报
阵列?您共享的代码没有修改
报警
数组-我已经验证了该部分。TypeScript的哪个版本?@Razem它是2.7.2
this.alarms.map((alarm)=>alarm.id==id)
不会更改
this.alarms
的内容。请添加一个显示实际问题的示例。嗯,它在本地对我有效。正如@Andreas所建议的,您应该使用当前配置制作一个完整的示例。它看起来像
this.alarms.map
不是
map(){[native code]}
(这是默认的数组映射函数),而是调用节点模块的函数。我认为这个函数不同于Array.map方法,并且覆盖了原始数组。TypeScript的哪个版本?@Razem它是2.7.2
this.alarms.map((alarm)=>alarm.id==id)
不会更改
this.alarms
的内容。请添加一个显示实际问题的示例。嗯,它在本地对我有效。正如@Andreas所建议的,您应该使用当前配置制作一个完整的示例。它看起来像
this.alarms.map
不是
map(){[native code]}
(这是默认的数组映射函数),而是调用节点模块的函数。我认为这个函数不同于Array.map方法,它覆盖了原始数组。