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

fan*_*ncy 28 javascript

var set = [{"color":"blue"},{"color":"green"},{"color":"red"},{"color":"green"}];
Run Code Online (Sandbox Code Playgroud)

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

Dom*_*nic 54

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

var results = set.filter(function (entry) { return entry.color === "green"; });
Run Code Online (Sandbox Code Playgroud)

Array#filter在某些较旧的浏览器中没有实现,因此请查看链接文章以获得向后兼容的垫片,或者更好地获得完整的ES5垫片.

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

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" });
Run Code Online (Sandbox Code Playgroud)

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

  • 甚至更奇怪你是否包含了jQuery标签. (4认同)