【发布时间】:2012-12-24 05:35:11
【问题描述】:
我的 JavaScript 知识在这里存在差距。我想在对象值数组中搜索特定值并返回它。
在我编写 JavaScript 的这一年里,我一直在这样实现它:
var itemClicked = (function(){
var retval;
//Note self.inventory.itemsArray is an array of JS objects
$(self.inventory.itemsArray).each(function(i){
if(parseInt(this.id) === parseInt(idOfItem)){
retval = this;
return false;
}
});
return retval;
})();
它有效,但我敢肯定还有更优雅的方式。请告诉我!
编辑 - 解决方案
感谢@gdoron 的回答。
var myVar = $(self.owner.itemsArray).filter(function(){
return parseInt(this.id) == parseInt(recItemID);
}).get(0);
注意:.get(0) 添加在末尾,因为 myVar 被包装为 jQuery 对象。
【问题讨论】:
-
定义“更高效。”有些人会误解“less characters”
-
那么
self.inventory.itemsArray是一个选择器数组还是jQuery对象? -
为什么不按 id 索引你的数组?他们只需要做
return self.inventory.itemsArray[id]并完全避免循环。 -
高效是什么意思?如果您正在寻找性能,您可能希望按
id对数组进行排序并执行二进制搜索以实现O(n log n)时间复杂度 - 甚至通过按 @987654329 存储项目来切换到O(n)的哈希映射@。如果您只想编写更少的代码,请使用$.filter()。 -
这是一个 Javascript 对象数组。效率更高,字符更少,并且在找到之前不必在循环中执行可能无用的代码
标签: javascript jquery arrays search object