Javascript 搜索短语时,循环执行错误
这是前一个问题的更新版本,但需要不同的答案 我正在尝试搜索字符串中的短语Javascript 搜索短语时,循环执行错误,javascript,Javascript,这是前一个问题的更新版本,但需要不同的答案 我正在尝试搜索字符串中的短语 var string = "blahmehfoobar hello random stuff here blahblah blegh coding stackover flow computersc ience"; var textToFind = ["blah", "random stuff", "stackover flow comput"]; var counter = 0; for (var i = 0; i
var string = "blahmehfoobar hello random stuff here blahblah blegh coding stackover flow computersc ience";
var textToFind = ["blah", "random stuff", "stackover flow comput"];
var counter = 0;
for (var i = 0; i < textToFind.length; i++){
var text = textToFind[i];
console.log('finding: ' + text);
for (var j = 0; j < string.length; j++){
if (text.charAt(0) === string.charAt(j)){
console.log(string.substring(j, text.length));
if (text === string.substring(j, text.length)){
counter++;
}
}
}
}
console.log(counter);
我不明白为什么string.substring(j,text.length)在打印第一个找到的短语后被执行。我试过调试这个,但没用
预期产出:
finding: blah
blah
blah
blah
finding: random stuff
random stuff
finding: stackover flow comput
stackover flow comput
编辑:我不是在寻找替代方案。我只想知道为什么循环出错,为什么没有得到预期的输出您可以迭代搜索数组,并使用带有开始值的
indexOf
进行搜索
var lotsOfText=“blahmehfoobar hello random stuff here blahblah blegh coding stackover flow computers”,
textToFind=[“废话”、“随机内容”、“叠加流计算”];
计数器=textToFind.reduce(函数(计数、短语){
var pos=lotsOfText.indexOf(短语);
同时(位置!=-1){
计数++;
pos=lotsOfText.indexOf(短语,pos+1);
}
返回计数;
}, 0);
控制台日志(计数器)
您可以迭代搜索数组,并使用带有开始值的indexOf
进行搜索
var lotsOfText=“blahmehfoobar hello random stuff here blahblah blegh coding stackover flow computers”,
textToFind=[“废话”、“随机内容”、“叠加流计算”];
计数器=textToFind.reduce(函数(计数、短语){
var pos=lotsOfText.indexOf(短语);
同时(位置!=-1){
计数++;
pos=lotsOfText.indexOf(短语,pos+1);
}
返回计数;
}, 0);
控制台日志(计数器)代码>这是如何使用子字符串的问题。起始值和结束值都基于零索引,而不是起始值和长度。这将有助于:
var string=“blahmehfoobar hello random stuff here blahblah blegh coding stackover flow Computers”;
var textToFind=[“胡说八道”、“随机填充”、“堆叠流计算”];
var计数器=0;
对于(变量i=0;i 控制台日志(计数器)代码>这是如何使用子字符串的问题。起始值和结束值都基于零索引,而不是起始值和长度。这将有助于:
var string=“blahmehfoobar hello random stuff here blahblah blegh coding stackover flow Computers”;
var textToFind=[“胡说八道”、“随机填充”、“堆叠流计算”];
var计数器=0;
对于(变量i=0;i 控制台日志(计数器)代码>回答您的问题,请参阅下面代码段中的注释:
var string=“blahmehfoobar hello random stuff here blahblah blegh coding stackover flow Computers”;
var textToFind=[“胡说八道”、“随机填充”、“堆叠流计算”];
var计数器=0;
对于(变量i=0;i 控制台日志(计数器)代码>回答您的问题,请参阅下面代码段中的注释:
var string=“blahmehfoobar hello random stuff here blahblah blegh coding stackover flow Computers”;
var textToFind=[“胡说八道”、“随机填充”、“堆叠流计算”];
var计数器=0;
对于(变量i=0;i 控制台日志(计数器)代码>至于为什么您的代码是错误的?这是因为你用的是而不是
substr
:获取两个参数,索引将作为子字符串开始的锚点,以及数量(多少字符)
子字符串
:获取两个参数(两个索引,并返回从第一个到最后一个的子字符串)。关于代码错误的原因?这是因为你用的是而不是
substr
:获取两个参数,索引将作为子字符串开始的锚点,以及数量(多少字符)
子字符串
:获取两个参数(两个索引,并返回从第一个到最后一个的子字符串)。a下一个
var myString = "blahmehfoobar hello random stuff here blahblah blegh coding stackover flow computersc ience";
var textToFind = ["blah", "random stuff", "stackover flow comput", "meh", "foo" ];
let counter = 0;
textToFind.forEach ( ( v, i ) => {
let sub = myString;
while ( i !== -1 ) {
i = sub.indexOf ( v );
counter += ( i === -1 ? 0 : 1 );
sub = sub.slice ( i + v.length );
}
});
偷偷地…通过在forEach中使用迭代val“i”,您不必在子循环中初始化它
如果我得到了要求,我应该
var myString = "blahmehfoobar hello random stuff here blahblah blegh coding stackover flow computersc ience";
var textToFind = ["blah", "random stuff", "stackover flow comput", "meh", "foo" ];
let counter = 0;
textToFind.forEach ( ( v, i ) => {
let sub = myString;
while ( i !== -1 ) {
i = sub.indexOf ( v );
counter += ( i === -1 ? 0 : 1 );
sub = sub.slice ( i + v.length );
}
});