我有一个包含状态的对象数组。它具有三个字段(id,name,abbr)
为简化起见,我将使用三种状态:
states: any = [{
"stateId": 3,
"stateName": "Arizona",
"stateAbbreviation": "AZ"
},
{
"stateId": 4,
"stateName": "Arkansas",
"stateAbbreviation": "AR"
},
{
"stateId": 5,
"stateName": "California",
"stateAbbreviation": "CA"
}]
我有一个提供程序,如果它与我传递给它的stateId相匹配,我想在其中返回一个对象。
因此在我的提供者中,我具有以下功能:
getState(stateId){
this.states.forEach(function(element) {
if(element.stateId == stateId){
return element;
}
});
}
在我的家庭控制器中,我只是这样称呼它:
console.log('State is: ', this.states.getState(50));
但是我遇到了错误:未定义。
我在做什么错了?
答案 0 :(得分:1)
需要返回结果。因此,添加一个return语句。还可以使用fitler
运算符代替forEach
getState(stateId){
return this.states.filter(function(element) {
if(element.stateId == stateId){
return element;
}
});
}
答案 1 :(得分:0)
或者,您可以使用filter
函数:
getState(stateId){
return this.states.filter(function(element) {
return element.stateId == stateId);
});
}
请注意用于返回return
函数结果的第一个filter
语句。
答案 2 :(得分:0)
您的问题是因为forEach
不能返回所有内容。
在typescript
中,您可以尝试这个。
getState(stateId) {
return this.states.find(x => x.stateId == stateId);
}
答案 3 :(得分:0)
From Docs
UP
对每个数组执行一次回调函数 元件;与forEach()
或map()
不同,它总是返回值 未定义且不可链接
您需要filter() method
修改后的代码
reduce()
或者您可以使用find() method
getState(stateId){
return this.states.filter(element=> {
if(element.stateId == stateId){
return element;
}
});
}
getState(stateId){
return this.states.find(element=> {
if(element.stateId == stateId){
return element;
}
});
一直运行到数组末尾,并在每个项目上调用其回调;与filter()
在找到一个之后停止。
答案 4 :(得分:0)
轻松步骤,您必须这样做:
2018-02-13