Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 搜索短语时,循环执行错误_Javascript - Fatal编程技术网

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