Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按字符串数组筛选javascript对象数组_Javascript_Jquery - Fatal编程技术网

按字符串数组筛选javascript对象数组

按字符串数组筛选javascript对象数组,javascript,jquery,Javascript,Jquery,我有一个对象数组,如下所示: var companies = [ { "name" : "Company 1", "logo" : "/logo.gif" }, { "name" : "Company 2", "logo" : "/logo2.gif" }, { "name" : "Company 3", "logo" : "/logo3.gif" } ]; 我想筛选此数组,以仅获取名称存在于另一个数组中的值: var myCompa

我有一个对象数组,如下所示:

var companies = [
    { "name" : "Company 1",
      "logo" : "/logo.gif" },
    { "name" : "Company 2",
      "logo" : "/logo2.gif" },
    { "name" : "Company 3",
      "logo" : "/logo3.gif" } ];
我想筛选此数组,以仅获取名称存在于另一个数组中的值:

var myCompanies = [ "Company 1", "Company 3" ];
在本例中,要返回的数据为:

var companies = [
    { "name" : "Company 1",
      "logo" : "/logo.gif" },
    { "name" : "Company 3",
      "logo" : "/logo3.gif" } ];
执行此操作的最佳方法是什么?

仅通过循环

var newArray = [];
$.each(companies, function(){
  if($.inArray(this.name, myCompanies) !== -1) newArray.push(this);
});
jQuery实用程序在这里使用:

您可以使用它来获得一个新的过滤数组,如下所示

var result = $.grep(companies, function(e) { 
               return $.inArray(e.name, myCompanies) != -1;
             });

。请注意,这比循环的性能要好得多,您可以在此处对其进行测试:

这应该适用于作业:

companies = $.map(companies,function(element){
  return ($.inArray(element.name,myCompanies)>-1?element:null)
}

您可以这样做,但请注意它的成本要高得多(由于为
this
创建了额外的作用域),您可以将它与
$.grep()
进行比较。这里:感谢jsperf链接-我以前没有听说过它,它是一个非常好的工具。我在中添加了$.map()的测试用例(这显然是三个答案中最慢的一个)