#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));