首页 > 解决方案 > 为什么此代码块在 codewars 测试用例中返回错误

问题描述

考虑来自codewars kata的以下问题:

西郊槌球俱乐部有两类会员,高级会员和公开会员。他们希望您提供一份申请表的帮助,该申请表将告诉潜在会员他们将被放置在哪个类别。要成为高级会员,会员必须年满 55 岁并且差点大于 7。在这个槌球俱乐部,差点范围从 -2 到 +26;球员越好,差点越低。输入 输入将包含一个列表列表,每个列表包含两个项目。每个列表都包含单个潜在成员的信息。信息由一个表示个人年龄的整数和一个表示个人残障的整数组成。示例 输入 [[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]] 输出 输出将包含一个字符串值列表(在 Haskell 中:Open 或 Senior),说明相应的成员将被放置在 Senior 或 Open 类别中。示例输出 ["Open", "Open", "Senior", "Open", "Open", "Senior"]

现在考虑我的代码:

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

此代码在运行测试用例时返回错误:

Unhandled rejection TestError: Expected: '[\'Open\', \'Senior\', \'Open\', \'Senior\']', instead got: '[\'Open\', \'Open\', \'Open\', \'Open\']'

谁能告诉我我的代码有什么问题。kata 的链接在这里

标签: javascriptnode.jsarraysarray-push

解决方案


data[i][i]没有任何意义。年龄和差点将分别为data[i][0]data[i][1]

虽然您可以修复索引,但更清洁的方法是

const openOrSenior = data => data.map(([age, handicap]) => (
  (age >= 55 && handicap > 7) ? 'Senior' : 'Open'
));

([age, handicap]) => (将从每个被迭代的子数组中提取第 0 项和第 1 项,将第 0 项放入名为 的变量中,将第 1 项放入名为的age变量handicap中。这称为解构赋值


推荐阅读