[英]How do I use ES6 code instead of a for loop here?
我正在尋找更好的方法來處理數組的搜索。 這就是我現在所擁有的。
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代碼替換循環。 我如何在這里使用ES6?
您可以利用一些內置方法,例如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
這將檢查元素是否以指定的字符串開頭(無論大小寫),並且在功能上等效。
請注意,盡管看起來不太好,但如estus所述 , for
循環在性能方面更好。 經過測試,看起來for
循環大約需要0.1毫秒才能完成,而我的解決方案需要0.2到0.7毫秒才能完成。 盡管存在差異,但在性能真正重要之前,我不會擔心性能-但是這里的速度更快是您的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.