javascript,搜索我的名字

时间:2017-07-26 10:21:21

标签: javascript arrays string

我正在用javascript创建一个程序,它在文本中搜索我的名字,并在控制台中记录它的频率。 我首先检查文本的每个字母,当它与我的名字的第一个字母匹配时,我使用另一个for循环将字母推入名为hits的数组。字符串" text"使用push()将其推到我名字的长度。 在此之后,我检查数组"是否命中"和字符串" myName"是相等的,如果它们相等,我将计数增加一。 但是我的代码没有用,而且我不知道为什么,我已经考虑过了很多,但一切都没有用。请帮忙。



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

7 个答案:

答案 0 :(得分:4)

您的代码失败是因为您正在将数组与字符串进行比较,这会导致错误,您可以使用join()从数组字符串中获取字符串,或者更好的方法是使用正则表达式,如下所示:< / p>

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

答案 1 :(得分: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);
}

答案 2 :(得分:1)

使用Array#reduce的简洁方法是:

&#13;
&#13;
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))
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
&#13;
&#13;

编辑:假设jsperf显示此解决方案比正则表达式慢。

答案 3 :(得分:0)

您正在将数组与字符串进行比较。在比较之前,使用join()方法将其转换为字符串。

e.g。

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

有关获取出现次数的更有效方法,请查看How to count string occurrence in string?处的答案

答案 4 :(得分:0)

简单地使用split()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);
}

答案 5 :(得分:0)

regexp怎么样?

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

答案 6 :(得分: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);