Я запрограммировал небольшую функцию, которая принимает значения x и o. Если в строке есть одинаковое количество букв, функция возвращает true
Моя проблема заключается в том, что я пытаюсь пройти этот тест во время code wars
и тесты возвращаются:
TypeError: Невозможно прочитать значение свойства length в XO
Почему это так? Что я могу сделать, чтобы решить эту проблему?
function XO(str) {
x = str.match(/[x]/gi).length
y = str.match(/[o]/gi).length
return x == y ? true : false
}
Вам нужно учитывать альтернативные и нулевые значения, передаваемые функции - также вы можете игнорировать тройное уравнение в обратном и просто вернуть результат оператора сравнения.
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;
}
}
Вы можете использовать этот код:
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
совпадающих элементов.
String.prototype.match()
: «Если строка соответствует выражению, она вернет массив, содержащий всю совпавшую строку в качестве первого элемента, а затем любые результаты, захваченные в скобках. Если совпадений не было, возвращаетсяnull
.»