2017-07-26 12 views
3

私はテキストで自分の名前を検索し、コンソールの同じ頻度を記録するjavascriptでプログラムを作っています。 私はまずテキストの各文字をチェックしていて、それが私の名前の最初の文字と一致するとき、私はhitsという配列に文字をプッシュする別のforループを使用します。文字列 "text"からの文字は、押す()。 この後、配列「ヒット」と文字列「myName」が等しいかどうかをチェックし、等しい場合は1つ増やします。 しかし、私のコードは動作していないと私はなぜ、私は非常に考えているが、すべてが無駄に行きました。助けてください。javascript、私の名前を検索

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

正規表現はどうですか? –

+0

文字列と配列を比較しているので 'if(myName == hits)'が渡されません。 – Teemu

+0

には、 'indexOf'のような検索関数を使う代わりに、最初からやっている理由がありますか? – Kaddath

答えて

4

あなたのコードが失敗していますあなたは配列を文字列と比較しているので、それはあなたにfalseを与えるでしょう、join()を使用して配列文字列から文字列を得ることができます。より良い方法はregular ex

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

0

あなたは、文字列に配列を比較しています。比較する前にjoin()メソッドを使用して文字列に変換します。

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

の作業コード:出現数を得るためのより効率的な方法については

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

は単にsplit()をどうHow to count string occurrence in string?

0

での回答を見てみましょう。 myNameは、文字列hitsであるあなたが自分の名前を検索するために正規表現を使用することができ、アレイの両方のいずれかの条件に等しくない

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

あり、それは非常に簡単です:

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

何を正規表現について:このようなPRESSION、?

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

Array#reduceを使用することにより、ニートなアプローチは次のようになります

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: は、この解決策がRegexpよりも遅いことを示しています。

関連する問題