比较字符串和字符串数组的最快方法 [英] fastest way to compare a string with a array of strings
问题描述
我有一个数组,让我们说:
I have a array, let's say:
var myArray = ["ibira", "garmin", "hide", "park", "parque", "corrida", "trote", "personal", "sports", "esportes", "health", "saúde", "academia"];
var myString = "I went to the park with my garmin watch";
检查我的String是否包含myArray中的任何单词的快速方法是什么?
What is the fast way to check if my String has any of the words in myArray?
Bellow是我的代码,但我不确定它是不是最好的方式...
Bellow is my code, but im not sure if it would be the best way to go...
function score(arKeywords, frase) {
if (frase == undefined) {
return 0;
} else {
var indice = 0;
var indArray = arKeywords.length;
var sentencaMin = frase.toLowerCase();
for (i = 0; i < indArray; i++) {
if (sentencaMin.search(arKeywords[i]) > 0) { indice++; }
}
return indice;
}
}
请帮助我。该函数将以很多字符串运行!
Please help me anyone. That function will run in A LOT of strings!
谢谢大家:)
推荐答案
根据这句话,从问题:
什么是检查我的String是否
myArray中的任何
?
( 强调 我的。)
(Emphasis mine.)
我建议如下,这将测试是否提供的字符串中的部分字符存在于提供的数组中。这– 理论上–一旦数组中存在的任何单词匹配,就停止比较:
I'd suggest the following, which will test if "some" of the words in the supplied string are present in the supplied array. This – theoretically – stops comparing once there is a match of any of the words from the string present in the array:
var myArray = ["ibira", "garmin", "hide", "park", "parque", "corrida", "trote", "personal", "sports", "esportes", "health", "saúde", "academia"],
myString = "I went to the park with my garmin watch";
function anyInArray(needles, haystack) {
// we split the supplied string ("needles") into words by splitting
// the string at the occurrence of a word-boundary ('\b') followed
// one or more ('+') occurrences of white-space ('\s') followed by
// another word-boundary:
return needles.split(/\b\s+\b/)
// we then use Array.prototype.some() to work on the array of
// words, to assess whether any/some of the words ('needle')
// - using an Arrow function - are present in the supplied
// array ('haystack'), in which case Array.prototype.indexOf()
// would return the index of the found-word, or -1 if that word
// is not found:
.some(needle => haystack.indexOf(needle) > -1);
// at which point we return the Boolean, true if some of the
// words were found, false if none of the words were found.
}
console.log(anyInArray(myString, myArray));
var myArray = ["ibira", "garmin", "hide", "park", "parque", "corrida", "trote", "personal", "sports", "esportes", "health", "saúde", "academia"],
myString = "I went to the park with my garmin watch";
function anyInArray(needles, haystack) {
return needles.split(/\b\s+\b/).some(needle => haystack.indexOf(needle) > -1);
}
console.log(anyInArray(myString, myArray));
参考文献:
-
Array.prototype.indexOf()
。 -
Array.prototype.some()
。 - 箭头功能。
- JavaScript正则表达式(MDN)指南。
-
String.prototype.split()
。
Array.prototype.indexOf()
.Array.prototype.some()
.- Arrow functions.
- Guide to JavaScript Regular Expressions (MDN).
String.prototype.split()
.
这篇关于比较字符串和字符串数组的最快方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!