给定一个对象数组,在JS中使用特定键找到对象的最佳方法是什么?
使用jQuery和underscoreJS很好。我只是在寻找最简单/最少的代码答案。
示例: 一个对象数组,其中每个对象都有一个" name"。找到具有特定"名称"。
的对象 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 :(得分:2)
你可以使用Underscore.js的_.where
功能,就像这样
console.log(_.where(people, {
"name": "C"
}));
# [ { name: 'C' } ]
返回数组中的所有对象,它们与我们传递的对象完全匹配,作为第二个参数。
答案 1 :(得分: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"}]
答案 2 :(得分:1)
你应该使用jQuery的grep
var people = [{name: "A"}, {name: "B"}, {name: "C"}];
var obj1= jQuery.grep(people,function(n,i){return (n.name=='A')})
答案 3 :(得分:0)
没有任何自定义库,您也可以执行此操作。请查看以下代码
var people = [{name: "A"}, {name: "B"}, {name: "C"}],
match=function(element){
return element.name==="A";
};
console.log(people.filter(match));
但它是一种静态代码。我不知道如何将键和值传递给match()函数。
答案 4 :(得分:0)
我很惊讶没有在这里找到明显的答案,因此:要使用Underscore进行操作,您将使用_.find
:
function getObject(myArray, searchKey, searchValue) {
return _.find(myArray, function(entry) { return entry[seachKey] === searchValue; });
}
不过,您不需要下划线; JavaScript的数组类型具有find
(从ES5开始):
function getObject(myArray, searchKey, searchValue) {
return myArray.find(function(entry) { return entry[searchKey] === searchValue; });
}
从ES2015 +开始,您可以通过箭头功能和解构使其更加简洁:
function getObject(myArray, searchKey, searchValue) {
return myArray.find(({[searchKey]: value}) => value === searchValue);
}
最后一个例子:
function getObject(myArray, searchKey, searchValue) {
return myArray.find(({[searchKey]: value}) => value === searchValue);
}
const people = [{name: "A"}, {name: "B"}, {name: "C"}];
console.log(getObject(people, "name", "C"));