javascript - 为什么此代码块在 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 的链接在这里。
解决方案
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
中。这称为解构赋值。
推荐阅读
- javascript - 如何使用 sentry v5 全局忽略错误以减少噪音
- reactjs - React Material UI 主题更改
- python - 未找到带有参数“(”,)”的“about_abc”的反向
- bash - 并行 wget 下载 url 列表并重命名
- graphql - 如何为现有的 graphql-schema 创建动态文档?
- python - 函数返回无而不是元组
- data-science - 如何选择数据来替换数据集中的缺失值
- spring-boot - invalid_token:无法将访问令牌转换为 JSON
- java - 如何从 Spring Web 通配符路径变量中排除前导斜杠?
- python - 如何修复 sqlite3.Cursor' 对象没有属性 'fecthall'?