[ CodeWar ] - 004:处理数组元素

629 阅读2分钟

系列文章

题目

img-01

规则如下:

  • 数组的第一个元素为 age,第二个元素为 handicaps
  • age > 54 并且 7 < handicaps < 26 的时候输出 'Senior'
  • 否则输出 'Open'

解析

这个逻辑是相当简单了(因为题目已经提示了输入是可以信任的,所以这里就不做健壮性处理)。

  • 遍历外层数组,将每个数组元素的 0 号位赋值给 age,1 号位赋值给 handicaps
  • 如果 age < 55 则返回 false
  • 否则判断 7 < handicaps < 26 是否满足,满足则返回 true
  • 遍历返回的数组,用 'Senior''Open' 替代 truefalse

按照上述思路完成函数即可:

function openOrSenior(data{
  let age, handicaps;
  return data
    .map((info) => {
      age = info[0];
      handicaps = info[1];
      if (age < 55) {
        return false;
      } else if (handicaps > 7 && handicaps < 26) {
        return true;
      }
    })
    .map((flag) => (flag ? "Senior" : "Open"));
}

优化

按照老规矩,我们对上面的便秘代码进行优化。

  • 首先对于数组元素,我们直接对其解构即可赋值
  • 其次判断条件之后直接返回 'Open' or 'Senior' 即可,根本没必要先返回 true or false 在遍历替换

那么最终结果如下:

const openOrSenior = (data) =>
  data.map(([age, handicap]) =>
    age > 54 && handicap > 7 && handicap < 26 ? "Senior" : "Open"
  );