【发布时间】:2013-03-23 21:06:48
【问题描述】:
示例
var test = [{
"name": "John Doo"
}, {
"name": "Foo Bar"
}]
var find = 'John Doo'
console.log(test.indexOf(find)) // output: -1
console.log(test[find]) // output: undefined
$.each(test, function(index, object) {
if(test[index].name === find)
console.log(test[index]) // problem: this way is slow
})
问题
在上面的示例中,我有一个包含对象的数组。我需要找到有name = 'John Doo'的对象
我的.each 循环正在工作,但这部分将执行 100 次,并且测试将包含更多对象。所以我认为这种方式会很慢。
indexOf() 不起作用,因为我无法在对象中搜索名称。
问题
如何在当前数组中搜索带有name = 'John Doo' 的对象?
【问题讨论】:
-
使用
for循环(不是for-in)来提高性能,一旦找到匹配项就使用break。 -
除非您的数组按
name排序,或者您有其他数据结构(例如按名称键入的地图),否则除了彻底搜索之外,没有其他方法可以找到它。跨度> -
如果您说循环本身将执行 100 次,那么我猜还有其他优化方法,但需要更多信息。
-
@Bondye - 你能控制数据的结构吗?如果名称是唯一的,并且您可以将它们作为其他数据的键,那么就有可能大大简化它。
标签: javascript jquery arrays object