Javascript函数尝试数组中的元素(如果未找到)

时间:2018-09-16 03:22:28

标签: javascript

我在获得县/区的React App中具有以下js函数

这可以获取administrative_area_level_2

    export const getDistrict = place => {
  var filtered_array = place.address_components.filter(function(address_component)
  {
    return address_component.types
  return district
}

如何修改上述功能以首先有效地检查administrative_2,然后如果不存在,则获取administrative_1

2 个答案:

答案 0 :(得分:2)

.filter在这里没有多大意义,因为您不需要创建中间数组,只需要查找一个值即可。您可以使用.find返回administrative_area_level_2(如果找到),否则返回administrative_area_level_1,否则返回unknown

export const getDistrict = ({ address_components }) => {
  const lvl2 = address_components.find(({ types }) => types.includes('administrative_area_level_2'));
  if (lvl2) return lvl2.long_name;
  const lvl1 = address_components.find(({ types }) => types.includes('administrative_area_level_1'));
  return lvl1 ? lvl1.long_name : 'Unknown';
};

或者,为了使代码更干燥,请将.findlong_name访问抽象到一个单独的函数中:

const makeFindType = arr => levelNum => {
  const found = arr.find(({ types }) => types.includes('administrative_area_level_' + levelNum));
  if (found) return found.long_name;
};

export const getDistrict = ({ address_components }) => {
  const findType = makeFindType(address_components);
  return findType('2') || findType('1') || 'Unknown';
};

答案 1 :(得分:-1)

您可以在该方法中添加逻辑以首先在Administrative_area_level_1中进行检查,如果找到则返回并停止执行,如果没有继续,则在Administrative_area_level_2中进行搜索