2017-07-26 5 views
3

Ich mache ein Programm in Javascript, die meinen Namen in einem Text durchsucht und protokolliert die Häufigkeit der gleichen in der Konsole. Ich überprüfe zuerst jeden Buchstaben des Textes und wenn er mit dem ersten Buchstaben meines Namens übereinstimmt, verwende ich eine andere for-Schleife, die Buchstaben in ein Array namens hits schiebt. Die Buchstaben von string "text" werden bis zur Länge meines Namens geschoben drücken(). Danach überprüfe ich, ob das Array "hits" und die Zeichenfolge "myName" gleich sind, und wenn sie gleich sind, erhöhe ich die Anzahl um eins. Aber mein Code funktioniert nicht und ich weiß nicht warum, ich habe sehr viel darüber nachgedacht, aber alles vergeblich. Bitte helfen Sie.Javascript, Suche nach meinem Namen

var text="abhishek apolo bpple abhishek",myName="abhishek",hits=[]; 
 
var count=0; 
 
for(i=0;i<text.length;i++) 
 
{ 
 
    if(text[i]===myName[0]) 
 
    { 
 
     for(j=i;j<(i+myName.length);j++) 
 
     { 
 
      hits.push(text[j]); 
 
     } 
 
    } 
 
    if(myName==hits) 
 
    { 
 
     hits=[]; 
 
     count=count+1; 
 
    } 
 
    hits=[]; 
 
} 
 
if(count===0) 
 
    console.log("Name not found!"); 
 
else 
 
    console.log(count); 
 
    
 

+1

Was ist mit Regexp? –

+0

'if (myName == hits)' wird nie übergeben, da Sie eine Zeichenfolge mit einem Array vergleichen. – Teemu

+0

gibt es einen Grund, warum Sie es von Grund auf neu machen, statt Suchfunktionen wie 'indexOf' zu verwenden? – Kaddath

Antwort

4

Ihr Code Fehler Da Sie Array mit String vergleichen, was Ihnen den Wert false geben würde, können Sie einen String aus Array-String mit join() erhalten, oder eine bessere Methode wäre die Verwendung von regulärem ex pression, wie folgt aus:

var text="abhishek apolo bpple abhishek",myName="abhishek",hits=[]; 
 
var count=0; 
 
console.log((text.match(new RegExp(myName, 'g'))).length);   
 

0

Du vergleichst in einen String ein Array. Verwenden Sie die Methode join(), um sie vor dem Vergleich in eine Zeichenfolge zu konvertieren.

z.B.

if(myName==hits.join('')) 

Arbeitscode:

var text="abhishek apolo bpple abhishek",myName="abhishek",hits=[]; 
 
var count=0; 
 
for(i=0;i<text.length;i++) 
 
{ 
 
    if(text[i]===myName[0]) 
 
    { 
 
     for(j=i;j<(i+myName.length);j++) 
 
     { 
 
      hits.push(text[j]); 
 
     } 
 
    } 
 
    
 
    if(myName==hits.join('')) 
 
    { 
 
     hits=[]; 
 
     count=count+1; 
 
    } 
 
    hits=[]; 
 
} 
 
if(count===0) 
 
    console.log("Name not found!"); 
 
else 
 
    console.log(count);

Für eine effizientere Möglichkeiten, die Anzahl der Vorkommen immer einen Blick auf die Antworten auf How to count string occurrence in string?

0

einfach mit split() tun. myName ist String hits ist ein Array beide nicht gleich für jede Bedingung

var text = "abhishek apolo bpple abhishek"; 
 
var myName = "abhishek"; 
 

 
var count = text.split(myName).length - 1 
 
if (count === 0) { 
 
    console.log("Name not found!"); 
 
} else { 
 
    console.log(count); 
 
}

1

Sie regex Ihren Namen suchen können, ist es sehr einfach:

var name = "abhishek apolo bpple abhishek"; 
var regexName = /abhishek/g; 
var matchname = name.match(regexName); 
if(matchname === null) { 
    console.log("Name not found!"); 
} else { 
    console.log(matchname.length); 
} 
0

Was regexp?

var text="abhishek apolo bpple abhishek", 
 
    myName="abhishek", 
 
    hits=[], 
 
    regexp = new RegExp(myName,'g'), 
 
    found ; 
 

 
// Thanks to https://stackoverflow.com/a/6323598/2846837 
 
do { 
 
    found = regexp.exec(text) ; 
 
    if (found) 
 
    hits.push(found[2]) ; 
 
} while (found) ; 
 

 
console.log(myName+' found : '+hits.length) ;

0
var text="abhishek apolo bpple abhishek",myName="abhishek",hits=[]; 

var array_text = text.split(" "); 
var count = 0 
for(var i in array_text){ 
    if(myName == (array_text[i])){ 
    count++; 
    hits.push(array_text[i]); 
    } 
} 
if(count===0) 
    console.log("Name not found!"); 
else 
    console.log(count); 
1

Ein ordentlicher Ansatz Array#reduce Verwendung wäre:

const text = 'History repeats itself. History repeats itself. Historians repeat each other.' 
 

 
function count(needle, haystack) { 
 
    return haystack 
 
    .split(' ') 
 
    .reduce((c, e) => e === needle ? ++c : c, 0) 
 
} 
 

 
console.log(count('repeats', text)) 
 
console.log(count('repeat', text))
.as-console-wrapper { max-height: 100% !important; top: 0; }

EDIT: Wie angenommen zeigt, dass diese Lösung langsamer als die Regexp ist.

Verwandte Themen