首页 > 解决方案 > 有没有办法全局而不是单独处理未定义的值?

问题描述

我正在使用可能会或可能不会返回任何对象属性的 api。因此,我只想获取键的值(如果存在)。

由于我需要从 API 中获取数百个值,我很想找到一种全局处理未定义值的方法(每个值分配仅在找到它要查找的键时执行)而不是为每个值创建一个 if 语句我正在取回。

result.forEach((item, i) => {
    let selectedLegend = Object.values(result[i]['legends']['selected'])[0];

    if(selectedLegend['kills']){
        datosTotales.kills += selectedLegend['kills'];
    }
    if(selectedLegend['wins_season_3']){
        datosTotales.wins += selectedLegend['wins_season_3'];
    }
    if(selectedLegend['top_3']){
        datosTotales.top3 += selectedLegend['top_3'];
    }
    // ...

    // ...
});

标签: javascriptobjectundefined

解决方案


一种选择是解构并将属性默认为 0,如果它们不存在,然后将它们相加:

result.forEach((item, i) => {
  const selectedLegend = result[i].legends.selected;
  const { kills = 0, wins_season_3 = 0, top_3 = 0 } = Object.values(selectedLegend)[0];
  datosTotales.top3 += kills + wins_season_3 + top_3;
});

如果这对您来说太重复了,那么迭代一组属性名称:

result.forEach((item, i) => {
  const selectedLegend = result[i].legends.selected;
  const obj = Object.values(selectedLegend)[0];
  for (const prop of ['kills', 'wins_season_3', 'top_3']) {
    datosTotales.top3 += obj[prop] || 0;
  }
});

推荐阅读