我有一个大约950个对象的数组,每个对象包含有关足球运动员的基本信息供我在页面上列出。我正在为此添加搜索功能,其中我检查了" name"键入每个对象并返回类似的结果。这段代码假设我有一个空数组用于结果(results = []),并且使用下划线表示我循环(参见:lodash):
_.each(players, function(player, i){
if(player.name.search(searchString) !== -1){
results.push(item);
}
})
这很有效,但需要永远。好吧它实际上需要大约1秒钟,但它或多或少会破坏浏览器并在巧克力蛋糕运行时吃掉记忆,而且它是一个非常缓慢的用户体验。
问:有没有更好的方法(更好= =更快)?
如果有帮助的话,我可以把我的实际数据放在jsfiddle / jsbin / jswhatever中。
答案 0 :(得分:0)
真的不确定性能,但我认为_.filter更适合你的问题。
var results = _.filter(players, function(player){
return player.name.toLowerCase().indexOf(searchString.toLowerCase()) !== -1;
});
答案 1 :(得分:0)
您可以了解search
- 功能是否比其他检查更快或更慢。像indexOf或其他什么。
您可以做的是让players
数组已经按名称属性排序。然后,您可以按字母顺序浏览数组,并跳过与搜索词的第一个字母不匹配的字母范围。
这样你就可以获得某种索引。