С 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;
}