在对象数组中查找匹配对象?

时间:2011-06-04 15:14:54

标签: javascript

var set = [{"color":"blue"},{"color":"green"},{"color":"red"},{"color":"green"}];

我希望能够执行类似db调用set.find({"color":"green"})之类的操作,并让它返回一个包含该属性的对象数组。

4 个答案:

答案 0 :(得分:48)

使用Array#filter,对于这种特殊情况,代码看起来像

var results = set.filter(function (entry) { return entry.color === "green"; });

Array#filter未在某些较旧的浏览器中实现,因此请参阅链接文章以获取向后兼容性垫片,或者更好地获取a full-fledged ES5 shim

对于更一般的情况,这只是扩展这个想法的问题:

function findByMatchingProperties(set, properties) {
    return set.filter(function (entry) {
        return Object.keys(properties).every(function (key) {
            return entry[key] === properties[key];
        });
    });
}

var results = findByMatchingProperties(set, { color: "green" });

同样,我正在使用ECMAScript 5方法Object.keysArray#every,因此请使用ES5垫片。 (代码在没有ES5垫片的情况下可行,但使用手动循环,写入和读取的乐趣要少得多。)

答案 1 :(得分:3)

我已经使用了来自jquery的map函数,我通过传递搜索的键值来获取选择索引,因此通过使用该索引,我们将从数组中获取所需的对象。

var mydata = [{ name: "Ram", Id: 1 }, { name: "Shyam", Id: 2 }, { name: "Akhil", Id: 3 }];

searchKey = 2

var mydata = [{ name: "Ram", Id: 1 }, { name: "Shyam", Id: 2 }, { name: "Akhil", Id: 3 }];

searchKey = 2

var selectedData = mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey)];

console.log(selectedData)

var selectedData = mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey)];

console.log(selectedData)

output
{ name: "Shyam", Id: 2 }

Note: if you want to pass search key as object then
searchKey = { Id: 2 };

mydata[mydata.map(function (item) { return item.Id; }).indexOf(searchKey.Id)];

output
{ name: "Shyam", Id: 2 }

答案 2 :(得分:2)

由于你已经包含了jQuery标签,这里有一种方法可以使用jQuery的map

var results = $.map( set, function(e,i){
  if( e.color === 'green' ) return e; 
});

文档声明您需要返回null以从数组中删除元素,但显然这是错误的,如注释中的jsFiddle所示;什么都不返回(即返回undefined)同样有效。

答案 3 :(得分:0)

使用带有隐含 return 和简洁主体的箭头函数:

const results = set.filter(entry => entry.color === "green");

另一个传入搜索变量的例子:

const searchString = 'green'; 
const results = set.filter(entry => entry.color === `${searchString}`);

阅读有关箭头函数的更多信息 MDN