查找字符串中指定字符的所有索引

例如,如果我有"scissors"in变量,并且想知道所有出现的字母的位置"s",它应该打印出来1, 4, 5, 8


如何以最有效的方式在JavaScript中执行此操作?我认为遍历整个循环不是非常有效


莫回无
浏览 806回答 3
3回答

qq_遁去的一_1

一个简单的循环效果很好:var str = "scissors";var indices = [];for(var i=0; i<str.length;i++) {&nbsp; &nbsp; if (str[i] === "s") indices.push(i);}现在,您指示要1,4,5,8。由于索引从零开始,因此这将为您提供0、3、4、7。因此,您可以添加一个:if (str[i] === "s") indices.push(i+1);现在它将给您您预期的结果。在这里可以看到一个小提琴。我认为遍历整个循环不是非常有效就性能而言,我认为在开始遇到问题之前,您不必担心这一点。这是一个比较各种答案的jsPerf测试。在Safari 5.1中,IndexOf表现最佳。在Chrome 19中,for循环是最快的。

一只名叫tom的猫

使用本机String.prototype.indexOf方法最有效地找到每个偏移量。function locations(substring,string){&nbsp; var a=[],i=-1;&nbsp; while((i=string.indexOf(substring,i+1)) >= 0) a.push(i);&nbsp; return a;}console.log(locations("s","scissors"));//-> [0, 3, 4, 7]但是,这是微优化。对于一个简单而简洁的循环,它将足够快:// Produces the indices in reverse order; throw on a .reverse() if you wantfor (var a=[],i=str.length;i--;) if (str[i]=="s") a.push(i);&nbsp; &nbsp;&nbsp;实际上,Chrome上的本机循环比使用indexOf!更快速。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript