我编写了一个小函数,它接收x和o。如果字符串中每个字母的编号相同,则该函数返回true
我的问题是我试图让这个测试通过code wars
并且测试正在返回:
TypeError:无法在XO
为什么会这样?我该怎么做才能解决这个问题?
function XO(str) {
x = str.match(/[x]/gi).length
y = str.match(/[o]/gi).length
return x == y ? true : false
}
答案 0 :(得分:0)
您可以使用此代码:
function XO(str) {
var x = str.match(/[x]/gi) && str.match(/[x]/gi).length;
var y = str.match(/[o]/gi) && str.match(/[o]/gi).length;
return x == y;
}
AND语句中的第一个条件将检查null
或undefined
,如果它不为null,则只计算匹配项的length
。
答案 1 :(得分:0)
您需要考虑传递给函数的备用值和空值 - 您也可以忽略返回中的三元方程式,并简单地返回比较运算符的结果。
console.log(XO('x')); // returns false since there is 1 'x' and 0 'o'
console.log(XO('o')); // returns false since there is 0 'x' and 1 'o'
console.log(XO('abc')); // returns true since there is 0 'x' and 0 'o'
function XO(str) {
if(str) {
x = str.match(/[x]/gi) || [];
y = str.match(/[o]/gi) || [];
return x.length == y.length;
} else {
return false;
}
}