Javascript Angular2 forEach无法读取属性

Javascript Angular2 forEach无法读取属性,javascript,angular,angular2-directives,Javascript,Angular,Angular2 Directives,我如何在数据forEach()中调用this.firms 我知道如何在Angular1中做到这一点,但我目前在Angular2中的项目不知道 目前,它在forEach外部工作正常,但在forEach内部工作不正常 console.log(this.firms[0].name); // works var a = 0; console.log("--------------"); data.forEach(function (eachObj) { c

我如何在数据
forEach()中调用
this.firms

我知道如何在Angular1中做到这一点,但我目前在Angular2中的项目不知道

目前,它在forEach外部工作正常,但在forEach内部工作不正常

 console.log(this.firms[0].name); // works
    var a = 0;
        console.log("--------------");

    data.forEach(function (eachObj) {
      console.log("firms check!");
      console.log(this.firms); // not working
      a = a + eachObj.income; 
      eachObj.name = this.firms[data.firmid - 1].name; // wont work
    });
错误:

Cannot read property 'firms' of undefined

上下文
这个
不会被注入到由
forEach()调用的匿名函数中。这就是为什么
这个
是未定义的

如果使用ES6功能,您可以使用
箭头函数
,因为它在函数中保留上下文:

data.forEach(eachObj => {
  console.log("firms check!");
  console.log(this.firms);
  a = a + eachObj.income; 
  eachObj.name = this.firms[data.firmid - 1].name;
});
或者直接绑定上下文:

data.forEach(function (eachObj) {
  console.log("firms check!");
  console.log(this.firms);
  a = a + eachObj.income; 
  eachObj.name = this.firms[data.firmid - 1].name;
}.bind(this));
编辑

如所述,您只需将上下文传递给
forEach()


这是javascript中作用域的基本示例。 在函数内部,此
指函数本身的上下文。外部世界是不可访问的

由于您将Typescript与angular一起使用,因此只需使用
箭头函数即可:

data.forEach((eachObj) => {
  console.log("firms check!");
  console.log(this.firms); // not working
  a = a + eachObj.income; 
  eachObj.name = this.firms[data.firmid - 1].name; // wont work
});
这将保留作用域,并且您的
在其内部可用。 在纯javascript中,您可以执行以下操作:

var that = this;

data.forEach(function (eachObj) {
  console.log("firms check!");
  console.log(that.firms); // not working
  a = a + eachObj.income; 
  eachObj.name = that.firms[data.firmid - 1].name; // wont work
});

您可以尝试将
数据
设置为

像这样:

Array.from(data).forEach((eachObj) => {
    console.log("firms check!"); 
    console.log(that.firms);
    eachObj.name = that.firms[data.firmid - 1].name;
})

这也会起作用

请向我们提供一个可能的副本,我有同样的问题,我使用的是angular 7,但没有一个解决方案有效。
Array.from(data).forEach((eachObj) => {
    console.log("firms check!"); 
    console.log(that.firms);
    eachObj.name = that.firms[data.firmid - 1].name;
})