Javascript 使用包含对嵌套对象引用的查询筛选对象

Javascript 使用包含对嵌套对象引用的查询筛选对象,javascript,filtering,underscore.js,lodash,Javascript,Filtering,Underscore.js,Lodash,我需要编写一个过滤器函数,允许我按嵌套对象进行查询,如下所示: var data = [ { twitter: { id: 1, name: "Bob" } }, { twitter: { id: 2, name: "Jones" } } ], query = { 'twitter.id': 1 }; # Perform filter using data and query variables var sear

我需要编写一个过滤器函数,允许我按嵌套对象进行查询,如下所示:

var data = [
             { twitter: { id: 1, name: "Bob" } },
             { twitter: { id: 2, name: "Jones" } }
           ],
    query = { 'twitter.id': 1 };

# Perform filter using data and query variables
var search = …

console.log(search);
> ["0"]
var search = _.filter(_.keys(data), function (key) {
    var obj = data[key];
    return _.every(query, function (val, queryKey) {
        return ref(obj, queryKey) === val;
    });
});
筛选器应返回与查询匹配的索引数组

我目前没有嵌套对象支持


但是,我希望能够查询嵌套对象,例如上面看到的
query

使用函数
ref
from,您的过滤器应该如下所示:

var data = [
             { twitter: { id: 1, name: "Bob" } },
             { twitter: { id: 2, name: "Jones" } }
           ],
    query = { 'twitter.id': 1 };

# Perform filter using data and query variables
var search = …

console.log(search);
> ["0"]
var search = _.filter(_.keys(data), function (key) {
    var obj = data[key];
    return _.every(query, function (val, queryKey) {
        return ref(obj, queryKey) === val;
    });
});

签出,你可以免费选择一个副本。检查这个库,它对@Bergi没有帮助。@OliverJosephAsh:为什么不?这正是您想要的。@Bergi它解释了如何将字符串转换为点表示法,但这无助于我编写筛选函数。这只适用于
查询中的一个属性。
:。你能想出一个在
query
中处理多个属性的解决方案吗?我现在有点困惑(抱歉),但我似乎已经在ES5中使用了它(这是我开始使用的):。谢谢只有
every
希望您返回
true
,否则它会打破循环,因为它已经知道不是每个项目都满足条件。是的,这是ES5变体。只有您标记了您的问题,因此我使用了跨浏览器功能(以及
。每个
也直接作用于对象)。当
数据
包含与
查询
不匹配的对象时,如何防止出错?即。