2015-11-28 2 views
0

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

/*jshint multistr:true */ 

text = "Blah blah blah blah blah blah Eric \ 
blah blah blah Eric blah blah Eric blah blah \ 
blah blah blah blah blah Eric"; 

var myName = "Eric"; 
var hits = []; 

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

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

Это не делает найти Эрика, он находит любую подстроку, которая начинается с E и имеет одинаковую длину. Так, например, Echo будет работать. Для меня код бессмыслен и должен быть удален без дальнейших размышлений =/ –

+1

Код замены для поиска Eric: 'if (text.indexOf (myName)> -1) console.log (« Имя найдено! »);' –

+0

Это будет повторяться 16 раз, потому что вы повторяете его hits.length и печатаете полное слово, которое хранится в виде хитов, если вы хотите распечатать только четыре раза, поэтому замените свой код на этот var getLength = hits.length; if (getLength === 0) { console.log («Ваше имя не было найдено!»); } else { \t для (var k = 0; k

ответ

2

Высокий уровень этот код проверяет каждого персонажа, ищущего строку «Эрик». В частности, он ищет символ «E», а затем следующие 3 символа. Если он находит символ «E» будет добавить и следующие 3 символов в выходной массив

// This is defining a test string 
text = "Blah blah blah blah blah blah Eric \ 
blah blah blah Eric blah blah Eric blah blah \ 
blah blah blah blah blah Eric"; 

// A substring to search for 
var myName = "Eric"; 

// An output array where the target string is stored once it is found 
var hits = []; 

// Look at every character inside the test string 
for(var i = 0; i < text.length; i++) { 
    // If the character is 'E' 
    if (text[i] === "E") { 
     // Add the character E and the following characters up to the length of the target string to the output 
     for(var j = i; j < (myName.length + i); j++) { 
      hits.push(text[j]); 
     } 
    } 
} 

// If the output has elements than we have found our target string 
if (hits.length === 0) { 
    console.log("Your name wasn't found!"); 
} else { 
    console.log(hits); 
} 
2

Ваше объяснение здесь:

/* The \ here is used for the text going to the next line to be the same line. */ 

text = "Blah blah blah blah blah blah Eric \ 
blah blah blah Eric blah blah Eric blah blah \ 
blah blah blah blah blah Eric"; 

/* Variable Declaration of to be found. */ 

var myName = "Eric"; 
var hits = []; 

/* Going through each and every character. */ 

for(var i = 0; i < text.length; i++) { 
    /* Checking if the current character is E */ 
    if (text[i] === "E") { 
     /* If so, start from there, and check the next character in my name, "r". */ 
     for(var j = i; j < (myName.length + i); j++) { 
      hits.push(text[j]); 
     } 
    } 
} 

/* If this is empty, we didn't have your name in the text. */ 
if (hits.length === 0) { 
    console.log("Your name wasn't found!"); 
} else { 
    console.log(hits); 
} 

Он просто проверяет Иру я не знаю, почему когда, если Er найдено, оно вернет true. Вау. Ой, подождите, второй раз, когда он проверяет, и i, и j увеличиваются.

1
  1. В for заявлении итерации по text строке (над каждой буквой):

    for(var i = 0; i < text.length; i++) 
    
  2. Если находит письмо 'E':

    if (text[i] === "E") 
    
  3. запускает новый цикл с myName длина для сбора следующих букв после 'E':

    for(var j = i; j < (myName.length + i); j++) 
    
  4. Нажатие каждой буквы в hints массива:

    hits.push(text[j]); 
    
  5. Наконец проверяет, если имя было найдено или не отображаться на консоли:

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