在打字稿/ 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
中唯一的convertLocationDataToStatutes
是subscribe
回调中的那个。大概是您要从convertLocationDataToStatutes
本身返回某些内容。