var set = [{"color":"blue"},{"color":"green"},{"color":"red"},{"color":"green"}];
解决方法
使用
Array#filter
,对于这种特殊情况,代码将是这样的
var results = set.filter(function (entry) { return entry.color === "green"; });
Array#过滤器在一些旧的浏览器中没有实现,所以看到链接的文章是为了向后兼容的垫片,或者更好的是获得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.keys
和Array#every
,所以使用ES5垫片. (该代码在没有ES5垫片的情况下是可行的,但使用手动循环,写入和读取的乐趣更少).