在打字稿/ JavaScript中,我试图从数据对象中获取“法规”:

{_id:“ 31ad2”,x:21.29,y:-157.81,法律:“ 290-11”,....}

所以我将data.law分配给一个变量。但是,我收到typeerror无法读取未定义的属性“ law”吗?

如果我在第11行控制台记录'data.law'或在第18行控制台结果[0],我将获得正确的值...

sectionsSuccess(res: Response) {
  this.allSections = [];
    this.sections = [];
    this.loadingSections = false;
    try {
      let jsonRes = res.json();
      this.jsonResLength = jsonRes.length;
      for (var a = 0; a < this.jsonResLength; a++) {
        let js = jsonRes[a];
        js.bookmarked = this.server.isInBookmark(js);
        this.allSections.push(js);
        if (a < 15) {
          this.sections[a] = this.allSections[a];
        }
      }
    } catch (e) {
      alert("Exception: " + e.message);
    }

    for (var i = 0; i < this.allSections.length; i++) {
      this.allSections[i] = this.convertLocationDataToStatutes(this.allSections[i]);
    }
// complete code added above
  for (var i = 0; i < this.sections.length; i++) {
    this.sections[i] = this.convertLocationDataToStatutes(this.sections[i]);
  }
}
  convertLocationDataToStatutes(data: any): any {
    var self = this;
    var chapterandsection = data.law; //line 11
    var values = chapterandsection.split('-');
    var chapter = values[0];
    var section = values[1];
    (self.server).getSection(chapter, section)
      .map(response => response.json()).subscribe(result => {
      return result[0];  // line 18
    });
  }

最佳答案

您的convertLocationDataToStatutes从不返回任何内容,但您使用的是返回值。调用没有返回值的函数的结果是undefined。因此,循环将一堆this.sections填充到undefined中。这意味着下次调用sectionsSuccess时,它将在undefined中看到this.sections[x],并且在其上访问data.law会导致错误。因此问题将在第二次调用sectionsSuccess时出现。您在data.law记录中看到的值大概是第一次调用它。

return中唯一的convertLocationDataToStatutessubscribe回调中的那个。大概是您要从convertLocationDataToStatutes本身返回某些内容。

10-04 13:54