快速搜索对象数组以获得匹配的键/值对的方法

时间:2014-05-25 17:57:30

标签: javascript arrays search underscore.js

我有一个大约950个对象的数组,每个对象包含有关足球运动员的基本信息供我在页面上列出。我正在为此添加搜索功能,其中我检查了" name"键入每个对象并返回类似的结果。这段代码假设我有一个空数组用于结果(results = []),并且使用下划线表示我循环(参见:lodash):

_.each(players, function(player, i){

  if(player.name.search(searchString) !== -1){
    results.push(item);
  }

})

这很有效,但需要永远。好吧它实际上需要大约1秒钟,但它或多或少会破坏浏览器并在巧克力蛋糕运行时吃掉记忆,而且它是一个非常缓慢的用户体验。

问:有没有更好的方法(更好= =更快)?

如果有帮助的话,我可以把我的实际数据放在jsfiddle / jsbin / jswhatever中。

2 个答案:

答案 0 :(得分:0)

真的不确定性能,但我认为_.filter更适合你的问题。

var results = _.filter(players, function(player){
  return player.name.toLowerCase().indexOf(searchString.toLowerCase()) !== -1;
});

答案 1 :(得分:0)

  • 您可以了解search - 功能是否比其他检查更快或更慢。像indexOf或其他什么。

  • 您可以做的是让players数组已经按名称属性排序。然后,您可以按字母顺序浏览数组,并跳过与搜索词的第一个字母不匹配的字母范围。 这样你就可以获得某种索引。