使用lodash forEach返回未定义的Javascript函数

时间:2018-11-29 10:23:59

标签: javascript reactjs for-loop return lodash

我正在编写一个ReactJS应用,我在函数filterSelected中有一个for循环,该函数遍历区域名称的数组(例如["Thailand", "Malaysia"]),并应返回其对应区域的数组代码(例如["TH", "MY"])。

在我的mapRegionToCode函数中,它通过对象的对象进行映射,并且控制台日志正确打印​​了相应的区域代码,但是该函数返回了undefined

任何想法为什么会受到赞赏!

mapRegionToCode(region) { // region = "Thailand"
  _.forEach(_.values(this.props.regionsCodes), regionCode => {
    if(regionCode.country.countryName === region) {
      console.log(regionCode.country.countryCode); //"TH"
      return regionCode.country.countryCode;
    }
  });
}

filterSelected(filters) {
...
  for(let i = 0; i < regionsArray.length; i++){
    const regionCode = this.mapRegionToCode(regionName);
    console.log(regionCode); //undefined
    regionNames.push(regionCode);
  }
...
}

1 个答案:

答案 0 :(得分:2)

更新

我读了你想做错什么。您需要执行以下操作:

  1. 使用country.countryName === region
  2. 查找regionCode
  3. 返回其country.countryCode

使用lodash,您可以执行以下操作:

mapRegionToCode(region) {
  return _.find(_.values(this.props.regionsCodes),regionCode => regionCode.country.countryName === region).country.countryCode
}

原始答案

您忘记在return函数中添加mapRegionToCode

mapRegionToCode(region) { // region = "Thailand"
  return _.map(_.values(this.props.regionsCodes), regionCode => {
    if(regionCode.country.countryName === region) {
      console.log(regionCode.country.countryCode); //"TH"
      return regionCode.country.countryCode;
    }
  });
}

(此外,您需要使用_.map而不是_.forEach