给定对象数组,在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;
}
});
}
您应该使用jQuery的console.log(_.where(people, {
"name": "C"
}));
# [ { name: 'C' } ]
grep
使用var people = [{name: "A"}, {name: "B"}, {name: "C"}];
var obj1= jQuery.grep(people,function(n,i){return (n.name=='A')})
:
_.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"}]
但是这是一种静态代码。我不知道如何将键和值传递给match()函数。
我很惊讶没有在这里找到明显的答案,因此:要使用Underscore进行操作,您将使用var people = [{name: "A"}, {name: "B"}, {name: "C"}],
match=function(element){
return element.name==="A";
};
console.log(people.filter(match));
:
_.find
不过,您不需要下划线; JavaScript的数组类型为_.find
(从ES5开始):
function getObject(myArray, searchKey, searchValue) {
return _.find(myArray, function(entry) { return entry[seachKey] === searchValue; });
}
从ES2015 +开始,您可以使用箭头功能和解构使其更加简洁:
find
最后一个的实时示例:
function getObject(myArray, searchKey, searchValue) {
return myArray.find(function(entry) { return entry[searchKey] === searchValue; });
}