如何在嵌套对象中找到具有特定属性的对象

时间:2017-02-17 14:50:38

标签: javascript collections filter lodash

例如,我有一个Paths对象

var Paths = {
    path1: {
        name: 'method1',
        get: {
            name: 'param1',
            id: 1
        },
        post: {
            name: 'param2',
            id: 2
        }
    },
    path2: {
        name: 'method2',
        get: {
            name: 'param1',
            id: 3
        },
        post: {
            name: 'param2',
            id: 4
        }
    }
};
  

我想根据id获取对象。

我试过这样做_.find(Paths, {get:{id:1}})但是这里的id也可以在post对象中。

我需要一些帮助来解决 lodash 中的这个问题。

2 个答案:

答案 0 :(得分:1)

在对象中查找_.pickBy

var res = _.pickBy(Paths, function(path) {
    return path.get.id === 1 || path.post.id === 1;
});

表示未知密钥

var res = _.pickBy(Paths, function(path) {
    return _.chain(path)
        .values()
        .some(function(val) {
            return _.get(val, 'id') === 1;
        })
        .value();
});

答案 1 :(得分:0)

实际上,您的代码很好,因为它只能在get内查找,而不是post。 lodash还有matchesProperty iteratee,在这种情况下,可以这样做:

_.find(Paths, ["get.id", 1]);

此外,您可以按自定义功能进行过滤:

_.find(Paths, function(o) { return o.get.id == 2 || o.post.id == 2; });