You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS嵌套数组解构实现会员分类 如何正确返回全部判定结果

问题背景

Western Suburbs Croquet Club设有两类会员资格:Senior(资深会员)、Open(公开会员),需开发申请表单判定程序,告知申请用户所属会员类别。
资深会员判定规则:年龄不低于55岁,且handicap(差点)大于7。该俱乐部差点取值范围为-2到+26,选手水平越高,差点数值越低。

现存疑问

当前编写的openOrSenior函数仅返回单个值,咨询如何对嵌套数组进行解构处理,该场景下应当使用递归实现还是forEach方法,才能让所有分类结果正确输出到结果数组中。
现有实现代码如下:

function openOrSenior(data) {
  let str = [];
  for (let i = 0; i < data.length; i++) {
    if (data == '') {
      return 'error!';
    } else if (data[0] >= 55 && data[1] > 7) {
      str.push('Senior');
    } else {
      str.push('Open');
    }
    return str;
  }
}

console.log(openOrSenior([
  [18, 20],
  [45, 2],
  [61, 12],
  [37, 6],
  [21, 21],
  [78, 9]
]));
问题排查

现有代码的核心问题有3个:

  • 取值逻辑错误:循环过程中没有取当前遍历到的子项data[i],直接访问外层数组的data[0]、data[1],永远只能读取第一组申请人的信息
  • 返回时机错误:return str写在for循环内部,第一次循环执行完就会直接终止函数,后续所有申请人数据都不会被处理
  • 空值判断无效:data == ''无法正确识别空数组、非数组类的非法入参,正常传入二维数组时该判断永远不会触发
实现方案选择

这个场景不需要使用递归:递归适合处理层级深度不确定的嵌套结构,当前入参是固定结构的二维数组(第一层为申请人列表,第二层为单个人的年龄、差点两个固定字段),用数组遍历方法实现逻辑更简单、可读性更高。

可以直接用数组解构+forEach实现,也可以用更适合映射转换场景的map方法实现:

forEach 实现版本

function openOrSenior(data) {
  // 入参合法性校验
  if (!Array.isArray(data) || data.length === 0) return 'error!';
  const result = [];
  // 遍历时直接解构每个子数组的年龄、差点字段
  data.forEach(([age, handicap]) => {
    result.push(age >= 55 && handicap > 7 ? 'Senior' : 'Open');
  })
  return result;
}

map 简洁实现版本

map会遍历每个元素并返回由处理结果组成的新数组,不需要手动维护结果数组做push操作,代码更精简:

function openOrSenior(data) {
  if (!Array.isArray(data) || data.length === 0) return 'error!';
  return data.map(([age, handicap]) => age >= 55 && handicap > 7 ? 'Senior' : 'Open');
}

传入题目给出的测试用例执行后,会返回正确结果:['Open', 'Open', 'Senior', 'Open', 'Open', 'Senior']

内容的提问来源于stack exchange,提问作者shiroSn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:45:43