给定一个对象数组,找到一个特定的键对象
给定一个对象数组,什么是在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;
}
});
}
您可以使用Underscore.js的_.where
功能,这样
console.log(_.where(people, {
"name": "C"
}));
# [ { name: 'C' } ]
这将返回数组,这正是我们所传递的第二个参数的匹配对象中的所有对象。
谢谢@thefourtheye - 我会接受定时器启动时的答案您是否也知道如何从数组中删除它?看起来像删除需要我知道数组中元素的索引 – 2014-11-04 05:10:16
@DonnyP您可以使用'_.filter'如其他答案所示,这将给出一个没有不需要的元素的新数组,因此,我们可以抛弃旧数组并开始使用新数组。 – thefourtheye 2014-11-04 05:14:45
使用_.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"}]
你应该使用jQuery
的 grepvar people = [{name: "A"}, {name: "B"}, {name: "C"}];
var obj1= jQuery.grep(people,function(n,i){return (n.name=='A')})
没有任何自定义库你也可以这样做。请看看下面的代码
var people = [{name: "A"}, {name: "B"}, {name: "C"}],
match=function(element){
return element.name==="A";
};
console.log(people.filter(match));
但它是一种静态代码。我不知道如何将键和值传递给match()函数。
你可能想要'filter'。 – elclanrs 2014-11-04 05:01:05
太糟糕了ES6还没有真正支持:'返回arr.find(el => el [searchKey] === searchValue);' – 2014-11-04 05:05:38
@ Qantas94Heavy它仍然在草稿:( – thefourtheye 2014-11-04 05:06:36