按字符串数组筛选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()的测试用例(这显然是三个答案中最慢的一个)