我正在用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;
答案 0 :(得分:4)
您的代码失败是因为您正在将数组与字符串进行比较,这会导致错误,您可以使用join()
从数组字符串中获取字符串,或者更好的方法是使用正则表达式,如下所示:< / p>
var text="abhishek apolo bpple abhishek",myName="abhishek",hits=[];
var count=0;
console.log((text.match(new RegExp(myName, 'g'))).length);
&#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
的简洁方法是:
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;
编辑:假设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怎么样?
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;
答案 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);