【问题标题】:Filtering a object with query that contains reference to nested object使用包含对嵌套对象的引用的查询过滤对象
【发布时间】:2013-02-24 21:14:19
【问题描述】:

我需要编写一个过滤器函数,让我可以通过嵌套对象进行查询,如下所示:

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"]

过滤器应返回与查询匹配的索引数组。

我目前在http://jsbin.com/umeros/2/edit 有这个不支持嵌套对象的工作。

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

【问题讨论】:

标签: javascript filtering underscore.js lodash


【解决方案1】:

使用来自this answer 的函数ref,您的过滤器应如下所示:

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

【讨论】:

  • 这仅适用于query:jsbin.com/uqabog/1/edit 中的一个属性。你能想出一个适用于query 中多个属性的解决方案吗?
  • 我现在有点困惑(抱歉),但我似乎已经让它在 ES5 中工作(这是我开始使用的):jsbin.com/umeros/9/edit。谢谢。
  • It does for multiple。只有every 期望您返回true,否则它会中断循环,因为它已经知道并非每个 项都满足条件。
  • 是的,这就是 ES5 变体。只有你标记了你的问题underscore.js,所以我使用了跨浏览器功能(_.every 也直接在对象上工作)
  • data 包含与query 不匹配的对象时,我可以做些什么来防止它出错? IE。 jsbin.com/umeros/11/edit
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2016-05-05
  • 2020-07-28
相关资源
最近更新 更多