使用字符串数组过滤JavaScript对象数组

5

我有一个对象数组,像这样:

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" } ];

什么是最佳的方法来做这件事?
3个回答

7

感谢提供jsperf的链接 - 我之前没听说过它,这是一个非常好的工具。我在http://jsperf.com/each-vs-grep/4中添加了一个$.map()测试用例(显然是三个答案中最慢的)。 - Dexter

1

只用循环...

var newArray = [];
$.each(companies, function(){
  if($.inArray(this.name, myCompanies) !== -1) newArray.push(this);
});

这里使用了jQuery工具:jQuery.each()jQuery.inArray()


1
你可以这样做,但请注意它更加昂贵(由于为this创建额外的作用域),你可以在这里将其与$.grep()进行比较:http://jsperf.com/each-vs-grep - Nick Craver

0

这应该可以完成工作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接