2014-11-04 87 views
0

给定一个对象数组,什么是在JS中用特定键查找对象的最佳方法?给定一个对象数组,找到一个特定的键对象

使用jQuery和underscoreJS很好。我只是在寻找最简单/最少的代码答案。

示例: 对象数组,其中每个对象都有一个“名称”。找到具有特定“名称”的对象。

var people = [{name: "A"}, {name: "B"}, {name: "C"}];

我当前的解决方案: 通行证的阵列中,所述键(例如, “名称”),并将该值(例如, “C”)。

function getObject(myArray, searchKey, searchValue) { 
    myArray.forEach(function(element){ 
    if (element[searchKey] == searchValue) { 
     return element; 
    } 
    }); 
} 
+0

你可能想要'filter'。 – elclanrs 2014-11-04 05:01:05

+2

太糟糕了ES6还没有真正支持:'返回arr.find(el => el [searchKey] === searchValue);' – 2014-11-04 05:05:38

+0

@ Qantas94Heavy它仍然在草稿:( – thefourtheye 2014-11-04 05:06:36

回答

2

您可以使用Underscore.js的_.where功能,这样

console.log(_.where(people, { 
    "name": "C" 
})); 
# [ { name: 'C' } ] 

这将返回数组,这正是我们所传递的第二个参数的匹配对象中的所有对象。

+0

谢谢@thefourtheye - 我会接受定时器启动时的答案您是否也知道如何从数组中删除它?看起来像删除需要我知道数组中元素的索引 – 2014-11-04 05:10:16

+0

@DonnyP您可以使用'_.filter'如其他答案所示,这将给出一个没有不需要的元素的新数组,因此,我们可以抛弃旧数组并开始使用新数组。 – thefourtheye 2014-11-04 05:14:45

1

使用_.filter

var people = [{name: "A"}, {name: "B"}, {name: "C"}]; 

var filteredPeople = _.filter(people, function(obj){ 
    return obj['name'] == 'C'; 
}); 

console.log(JSON.stringify(filteredPeople)) // [{"name":"C"}] 

如果你想不匹配的对象(一个或多个)阵列,使用_.reject

var filteredPeople = _.reject(people, function(obj){ 
    return obj['name'] == 'C'; 
}); 

console.log(JSON.stringify(filteredPeople)) // [{name: "A"}, {name: "B"}] 
1

你应该使用jQuery

grep
var people = [{name: "A"}, {name: "B"}, {name: "C"}]; 

var obj1= jQuery.grep(people,function(n,i){return (n.name=='A')}) 
0

没有任何自定义库你也可以这样做。请看看下面的代码

var people = [{name: "A"}, {name: "B"}, {name: "C"}], 
 
    match=function(element){ 
 
     return element.name==="A"; 
 
    }; 
 
console.log(people.filter(match));

但它是一种静态代码。我不知道如何将键和值传递给match()函数。

相关问题