Невозможно прочитать свойство 'length' с нулевым значением при вызове .length

1
  • Я запрограммировал небольшую функцию, которая принимает значения 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 
    }
  • 0
    Проверь ответ
  • 1
    String.prototype.match() : «Если строка соответствует выражению, она вернет массив, содержащий всю совпавшую строку в качестве первого элемента, а затем любые результаты, захваченные в скобках. Если совпадений не было, возвращается null
Теги:

2 ответа

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;
  }
}
  • 0
    @Andreas - в ответе внесены изменения, чтобы учесть различия - добавление пустого массива (length = 0) вместо «null», чтобы затем можно было выполнить сравнение.
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
    Что ты хочешь этим сказать? @Andreas
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню