【发布时间】:2012-12-31 00:14:19
【问题描述】:
基本上,我需要从包含在主字符串中的数组中获取单词
我在这里有一个循环代码,但我认为有一个单行代码可以做到这一点。 我需要对代码进行优化,不仅要优化代码长度,还要优化性能。
谢谢
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 />"));
【问题讨论】:
-
我的第一个想法是将数组转换为正则表达式。但这只会找到匹配的子字符串,而不是告诉您找到了哪些有效单词。如果有效词中没有重叠的子串就可以了,但是它们有很多。
-
你可以创建一个映射表。由于 "experts" 包含 "ex"、"expert" 和 "experts" 本身,因此您只需处理 "experts" 即可知道三个单词是有效的。
-
@asgoth 事情是,sMainWord 会不时更改。
-
我知道,但它独立于主词。假设你有这样的映射表(伪):(专家 -> 专家,专家,前),(专家 -> 专家,前),(交换 -> 变化),......那么你只需要遍历最大的首先是单词,如果这些最大的单词中的任何一个匹配,您也可以从映射表中删除较小的单词。
-
除非映射表来自服务器,否则不;)否则一个小的优化:用 [] 替换 new Array()