从对象数组返回行

时间:2018-06-26 06:07:55

标签: angular typescript

我有一个包含状态的对象数组。它具有三个字段(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));

但是我遇到了错误:未定义。

我在做什么错了?

5 个答案:

答案 0 :(得分:1)

需要返回结果。因此,添加一个return语句。还可以使用fitler运算符代替forEach

getState(stateId){
    return this.states.filter(function(element) {
      if(element.stateId == stateId){
        return element;
      }  
    });
  }

Demo

答案 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()

Live Demo;

或者您可以使用find() method

 getState(stateId){


      return this.states.filter(element=> {
          if(element.stateId == stateId){
            return element;
          }  
        });
      }

Live Demo

getState(stateId){ return this.states.find(element=> { if(element.stateId == stateId){ return element; } }); 一直运行到数组末尾,并在每个项目上调用其回调;与filter()在找到一个之后停止。

答案 4 :(得分:0)

轻松步骤,您必须这样做:

2018-02-13