我正在寻找更好的方法来处理数组的搜索。这就是我现在所拥有的。
function search (arr, word) {
word = word.toUpperCase();
var res = [];
for(var i = 0; i < arr.length; i++) {
if(arr[i].slice(0, word.length) == word) {
res.push(arr[i]);
}
}
return res;
}
var myArr = ["england", "China", "France", "Eng", "Ch", "Australia"];
search(myArr, "e");
它有效,但我想用ES6代码替换for循环,因为我正在努力学习它。我怎么能在这里使用ES6?
答案 0 :(得分:3)
您可以使用一些内置方法,例如String#startsWith
和Array#filter
:
function search(arr, word) {
return arr.filter(element => element.toUpperCase().startsWith(word.toUpperCase()));
}
const myArr = ["england", "China", "France", "Eng", "Ch", "Australia"];
console.log(search(myArr, "e"));
filter
方法仅保留数组中满足回调指定的特定条件的元素。因此,无论大小写如何,它都会检查元素是否以单词开头。
如果您需要IE支持,请尝试使用String#indexOf
:
element.toUpperCase().indexOf(word.toUpperCase()) == 0
这将检查元素是否以指定的字符串开头,无论大小写,并且在功能上等效。
请注意,虽然它看起来不漂亮,但for
循环在性能方面比estus noted更好。在测试之后看起来它需要for
循环大约0.1毫秒才能完成,我的解决方案的范围从0.2到0.7毫秒才能完成。虽然存在差异,但在真正重要之前我不会担心性能 - 但这里的解决方案速度越快。