使用jQuery实现Javascript高效的搜索数组

Ada*_*ite 6 javascript arrays search jquery object

我的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;

})();
Run Code Online (Sandbox Code Playgroud)

它有效,但我确信任何东西都有更优雅的方式.请告诉我!

编辑 - 解决方案

感谢@gdoron,他的回答如下.

var myVar = $(self.owner.itemsArray).filter(function(){
   return parseInt(this.id) == parseInt(recItemID);
}).get(0);
Run Code Online (Sandbox Code Playgroud)

注意:.get(0)最后添加了因为myVar被包装为jQuery对象.

gdo*_*ica 14

本机jQuery函数是filter:

$(data).filter(function(){
    return this.id == "foo";
});
Run Code Online (Sandbox Code Playgroud)

它比你拥有的代码短,更重要的是更具可读性.
关于效率,它将迭代集合中的所有元素以找到尽可能多的匹配,但我几乎不相信它将成为您应用程序的瓶颈,不要专注于微观优化.

我建议你阅读Eric Lipper博客,了解哪个更快.

您也可以grep按照@Mattias Buelens的建议使用:

$.grep(data, function(ele){
    retun ele.id == "foo";
});
Run Code Online (Sandbox Code Playgroud)

  • 原生于jq,不是语言的原生.您可能希望更准确地了解这一点. (3认同)
  • @gustafr,我相信这很明显,但我会加上它. (2认同)