CodeAcademy; программа не работает на JS

#javascript

#javascript

Вопрос:

Итак, code academy говорит, что я выполнил это правильно, но это не дает никакого результата. Предполагается, что он определяет, сколько раз имя «Алекс» появляется в тексте переменной. Может кто-нибудь, пожалуйста, показать мне, что я делаю не так?

Примечание: результат этого текущего кода просто = []

Заранее благодарю вас, вот код:

 var text = "Alex, blah, Alex, blah, blah, blah, Alex, blah, Alex"

var myName = "Alex"
var hits = []

for (var i=0; i<text.length; i  ){
    if (text[i] === "A"){
        for (var j = i; j < i   myName.length;j  ){
            hits.push(j);
        }
    }
}

if (hits.length = 0){
    console.log("Your name wasn't found")
}
else{
    console.log(hits);
}
  

Комментарии:

1. CodeAcademy, очевидно, некорректен. Для начала измените тест длины обращений с hits.length = 0 (назначение длины) на hits.length == 0 (проверка длины). Ваша среда разработки обычно предупреждает вас о подобных вещах, поскольку существует множество компиляторов, которые этого не делают, возможно, вы захотите использовать «условия Йоды», чтобы избежать такого рода ошибок (т. Е. if (0 == hits.length)

2. Также связано с тем, что сказал Тиброгарган (в качестве примечания), использование array.length = 0 приведет к удалению всего содержимого этого массива.

3. Спасибо вам за то, что вы оба определили ошибку == сообщили мне о редактировании моих сообщений 🙂

4. @Alex Есть и другие проблемы. Ваш код будет соответствовать Alex, конечно… но она также будет соответствовать Alice, Albert, Advocado и YAAAA! (Последнее 4 раза)

Ответ №1:

Если вам разрешено использовать регулярные выражения, это довольно просто…

 var text = "Alex, blah, Alex, blah, blah, blah, Alex, blah, Alex"

var myName = "Alex"
var hits = []

hits = text.match(new RegExp( "\b" myName "\b", "g"));

if (hits.length == 0){
    console.log("Your name wasn't found")
}
else{
    console.log(hits);
}  

Ответ №2:

Проблема здесь:

 hits.push(j); // you push index not symbol
  

Должно быть:

  hits.push(text[j]);
  

И мое решение:

 var text = "af grwg rh thrthj jjy jtj Denys g er Denys";
var myName = "Denys";
var hits = [];
var k = 0;

for (var i = 0; i < text.length; i  ){
    if (text[i] === "D"){
        for(var j = i; j < myName.length   i; j  ){
            hits.push(text[j]);
        }
          k;
    }    
}
if (hits === []){
    console.log("Your name wasn't found!");
}
else{
    console.log("Your name was found "   k   " times!");
}
  

Также я хочу спросить вас: знаете ли вы о https://discuss.codecademy.com ?

Я думаю, вы сможете быстрее найти ответ там. Но это ваш выбор.

Ответ №3:

Кстати, есть аккуратный метод массива под названием «reduce», который принимает массив и возвращает единственное значение. Вы можете превратить свой текст в массив с помощью метода разделения строки.

 var text = "Alex, blah, Alex, blah, blah, blah, Alex, blah, Alex";
var textArray = text.split(', ');    // split into an array
var myName = "Alex";

// reduce the array to a single value.
// Just increase a counter each time the name matches.

var total = textArray.reduce(function(prev, curr) {
  if (curr === myName)   prev;
  return prev;
}, 0);
console.log(total);

// or if you want to get small.
// "Variables? Variables? We don't need no stinking' variables!"

console.log("Alex, blah, Alex, blah, blah, blah, Alex, blah, Alex".split(', ').reduce(function(prev, curr) {
  return curr === "Alex" ?   prev : prev;
}, 0));