编程测试随着边缘情况的失败而回归:
空数组 - 预期:[],而不是:[""]
简介: Western Suburbs槌球俱乐部有两类会员,即高级和公开会员。他们希望您提供申请表格的帮助,告诉潜在会员他们将被安排哪个类别。
要成为一名大四学生,成员必须年满55岁并且有一个大于7的差点。在这个槌球俱乐部,残障从-2到+26;玩家越好障碍越低。
输入
输入将包含一个列表,每个列表包含两个项目。每个列表包含单个潜在成员的信息。信息包括个人年龄的整数和个人差点的整数。
示例输入:
[[18, 20],[45, 2],[61, 12],[37, 6],[21, 21],[78, 9]]
输出
输出将包含一个字符串值列表(在Haskell中:Open或Senior),说明相应成员是否应被置于高级或开放类别中。
示例输出 [" Open"," Open"," Senior"," Open"," Open","高级"]
我的功能:
function openOrSenior(data){
var c = [];
var i;
for (i = 0; i < data.length; ++i) {
var person = data[i];
var age = person[0];
var handicap = person[1];
// senior
if ((age >= 55) && (handicap > 7)) {
person = [];
person.push("Senior");
} else {
person = [];
person.push("Open");
}
c.push(person);
}
return c.join().split(',');
}
任何指针?
答案 0 :(得分:1)
原因是
您正在将数组推送到c
,而不仅仅是字符串
然后你正在做c.join().split(',')
,它将首先将这些数组合并成一个字符串(以相当微妙的方式),然后将该字符串拆分为分隔符(','
)。 split
的结果总是至少有一个条目长 - 如果数组没有出现分隔符(如果c
在开始时为空则不会出现) ,你得到一个包含单个字符串的数组(如果c
在开始时为空,则为空白数据集。)
例如,[].toString().split(",")
为[""]
,而不是[]
。
解决方案是将字符串而不是数组推送到c
然后直接返回(不是.join().split(',')
)。
关于我上面的“相当微妙的方式”评论。如果你有一个数组数组,如下所示:
var a = [ ["a", "b"], ["c", "d"], ["e", "f"] ];
a.join()
将遍历a
中的每个条目,并在其上调用toString
。由于a
中的条目是数组,因此在toString
上调用join
与调用Array#toString
相同(它只是['a', 'b'].toString()
的定义方式),因此您最终会执行"a,b"
1}},它给你"c,d"
,然后与第二个条目("e,f"
)相同,然后再与第三个("a,b,c,d,e,f"
),然后取出所有这些并制作一个单个字符串,中间有逗号(window.a = window.a
)。
答案 1 :(得分:-1)
尝试以下方法:
function openOrSenior(data){
function determineMembership(member){
return (member[0] >= 55 && member[1] > 7) ? 'Senior' : 'Open';
}
return data.map(determineMembership);
}