gpt4 book ai didi

javascript - 优化在数组中搜索匹配项的 JavaScript 代码

转载 作者:行者123 更新时间:2023-11-28 13:46:28 25 4
gpt4 key购买 nike

基本上,我需要从主字符串中包含的数组中获取单词

我这里有一个循环代码,但我认为有一个单行代码可以做到这一点。我需要对代码进行优化,不仅要优化代码长度,还要优化性能。

谢谢

var aValidWords = ["ex", "exes", "expert", 
"experts", "expertise", "sex", "sexes",
"exchange", "change", "changes"];
var sMainWord = "expertsExchange";
var aPossibleWords = new Array();

var sMainWordLower = sMainWord.toLowerCase();
for(i=0; i < aValidWords.length; i++){
var sCurrentWord = aValidWords[i].toLowerCase();
if(sMainWordLower.indexOf(sCurrentWord) != -1){
aPossibleWords.push(aValidWords[i]);
}
}

document.write(aPossibleWords.join("<br />"));

最佳答案

我比较了三种可能的实现:

替代方案 1 - 使用 for 循环:

function alternative1(aValidWords, sMainWordLower) {
var aPossibleWords1 = [];
for(i=0; i < aValidWords.length; i++){
if(sMainWordLower.indexOf(aValidWords[i]) != -1){
aPossibleWords1.push(aValidWords[i]);
}
}
return aPossibleWords1;
}

替代方案 2 - 使用 jQuery grep功能:

function alternative2(aValidWords, sMainWordLower) {
return $.grep(aValidWords, function(word) {
return sMainWordLower.indexOf(word) != -1;
}
)
}

替代方案 3 - 使用原生 JavaScript filter方法(IE9、Chrome、Firefox、Opera、Safari):

function alternative3(aValidWords, sMainWordLower) {
return aValidWords.filter(function(word) {
return sMainWordLower.indexOf(word) != -1;
}
)
}

我使用 Chrome Profile 工具测量了执行时间。每个替代方案都使用随机数百万字的数组执行 10 次。结果是:

  • 替代方案 1:20 次执行 -> 21,68 秒
  • 替代方案 2:20 次执行 -> 26,31 秒
  • 替代方案 3:20 次执行 -> 34,66 秒

令我惊讶的是,原生 JavaScript Filter功能太慢了。

如果您不想自己测量执行时间,可以使用 jsFiddle - 脚本需要一些时间才能完成。

一般来说,这三种选择是最简单的。如果这些执行时间适合您,请使用其中之一,否则 @Pumbaa80 的答案是正确的。

[更新]

有关结果的解释(为什么 JQuery grep 函数比原生 JavaScript 过滤函数更快),请查看此 question/answerjsFiddle代码也被移植到jsPerf感谢@Alexander。

关于javascript - 优化在数组中搜索匹配项的 JavaScript 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14009583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com