循环遍历json的未定义值

时间:2017-09-17 16:44:45

标签: javascript typescript

在typescript / javascript中我试图从数据对象中获取“statute”:

{_ id:“31ad2”,x:21.29,y:-157.81,law:“290-11”,....}

所以我将data.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
    });
  }

1 个答案:

答案 0 :(得分:1)

您的convertLocationDataToStatutes永远不会返回任何内容,但您正在使用其返回值。调用没有返回值的函数的结果是undefined。因此,循环使用一堆this.sections填充undefined。这意味着下一个时间sectionsSuccess被调用,它将在undefined中看到this.sections[x],并且访问data.law将导致错误。因此,问题将显示第二时间sectionsSuccess被调用;您在data.law的日志记录中看到的值可能是第一次调用它。

return中唯一的convertLocationDataToStatutessubscribe回调中的convertLocationDataToStatutes。大概你想从ffmpeg -i input.mp4 -filter:a "volume=1.5" output.mp4 本身返回一些东西。