如何在此处使用ES6代码而不是for循环?

时间:2017-06-27 13:47:39

标签: javascript for-loop ecmascript-6

我正在寻找更好的方法来处理数组的搜索。这就是我现在所拥有的。

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?

1 个答案:

答案 0 :(得分:3)

您可以使用一些内置方法,例如String#startsWithArray#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毫秒才能完成。虽然存在差异,但在真正重要之前我不会担心性能 - 但这里的解决方案速度越快。