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变体。只有您标记了您的问题,因此我使用了跨浏览器功能(以及。每个也直接作用于对象)。当数据包含与查询不匹配的对象时,如何防止出错?即。