Логическая ошибка в моей функции мешает работе count ++ - PullRequest
0 голосов
/ 03 ноября 2018

Я изо всех сил пытаюсь найти последнюю логическую ошибку в этом коде, он все еще возвращает Найдено 0 желаний, а не 12.

var msg = 'I wish to wish the WISH you wish to wish but if you wish '
+ 'the WISH the witches wish I won\'t wish the WISH you wish '
+ 'to wish';
document.writeln('Found ' + countTerms(msg) + ' wishes.');
function countTerms(phrase) {
var i = 1;
var count = 0 ;
var terms = phrase.split(' ');
    for (i = 0; i < terms.length - 1; i++){
        if (terms[i].toUpperCase() == 'WISH'){
return count++;
        }
    }
}

Ответы [ 5 ]

0 голосов
/ 03 ноября 2018

Есть две ошибки. Вернуть счет после цикла. Еще один находится в цикле for: вы либо используете i

var msg = 'I wish to wish the WISH you wish to wish but if you wish ' +
  'the WISH the witches wish I won\'t wish the WISH you wish ' +
  'to wish';
  
console.log('Found ' + countTerms(msg) + ' wishes.');

function countTerms(phrase) {
  var count = 0;
  var terms = phrase.split(' ');
  for (let i = 0; i < terms.length; i++) {
    if (terms[i].toUpperCase() === 'WISH') {
      count++;
    }
  }
  return count;
}
0 голосов
/ 03 ноября 2018

Это потому что ты возвращаешь -инкрементная ценность. Это означает, что переменная не обновляется, пока не завершится выполнение оператора return. чтобы исправить свой код, измените

return count++

к этому

count++

, а затем вернуть счетчик внизу функции после цикла for.

0 голосов
/ 03 ноября 2018

Вы всегда return первый count напрямую, который равен 0 в этой точке. Чтобы продолжать считать, просто выполните count++ в цикле и return count; после завершения цикла.

0 голосов
/ 03 ноября 2018

Не возвращаться внутрь цикла

for (i = 0; i < terms.length - 1; i++){
    if (terms[i].toUpperCase() == 'WISH'){
       count++;
    }
}

// Return hear
return count;
0 голосов
/ 03 ноября 2018

С return внутри цикла for, для самого первого совпадения мы возвращаем count и затем увеличиваем, что означает, что функция сама вернет 0. И если такого совпадения не было, он вернет undefined (возврат по умолчанию).

Вам нужно будет вернуть count после цикла for. Кроме того, условие для цикла for должно быть i < terms.length, иначе мы пропустим последнее значение в массиве.

var msg = 'I wish to wish the WISH you wish to wish but if you wish '
+ 'the WISH the witches wish I won\'t wish the WISH you wish '
+ 'to wish';
document.writeln('Found ' + countTerms(msg) + ' wishes.');
function countTerms(phrase) {
  var i = 1;
  var count = 0 ;
  var terms = phrase.split(' ');
  for (i = 0; i < terms.length; i++) {
    if (terms[i].toUpperCase() == 'WISH'){
      count++;
    }
  }
  return count;
}

Обратите внимание, вы также можете упростить свой код, используя Array.reduce . После разбиения строки на массив отфильтруйте только те значения массива, которые имеют значение 'wish', а затем верните длину отфильтрованного массива.

var msg = 'I wish to wish the WISH you wish to wish but if you wish '
+ 'the WISH the witches wish I won\'t wish the WISH you wish '
+ 'to wish';
document.writeln('Found ' + countTerms(msg) + ' wishes.');
function countTerms(phrase) {
  return phrase.split(' ').filter(p => p.toUpperCase() === 'WISH').length;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...