给定一个对象数组,找到具有特定键的对象

时间:2014-11-04 04:58:36

标签: javascript jquery arrays underscore.js

给定一个对象数组,在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;
    }
  });
}

5 个答案:

答案 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"));