给定对象数组,使用特定键查找对象

问题描述 投票:0回答:5

给定对象数组,在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;
    }
  });
}
javascript jquery arrays underscore.js
5个回答
2
投票

您可以像这样使用Underscore.js的_.where函数

_.where

这将返回数组中的所有对象,该对象与我们作为第二个参数传递的对象完全匹配。


1
投票

您应该使用jQuery的console.log(_.where(people, { "name": "C" })); # [ { name: 'C' } ]

grep

1
投票

使用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

0
投票

没有任何自定义库,您也可以执行此操作。请看下面的代码

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

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

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


0
投票

我很惊讶没有在这里找到明显的答案,因此:要使用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; });
}
© www.soinside.com 2019 - 2024. All rights reserved.