[英]underscore js - finding a nested object
我有一个下划线过滤器,该过滤器返回包含要查找的子对象的父对象。 但是我希望它只返回子对象。 由于它已经在完成查找子对象以返回父对象的工作,因此我想知道如何简化代码以仅返回子对象。 这是示例:
var filterObj = _.filter(filtersPath, function(obj) {
return _.where(obj.filters, {id: prefilterCat}).length > 0;
});
因此,在这里,obj.filters内部的ID为prefilterCat的嵌套对象是我要返回的对象,而不是其父对象。 因此,目前我必须在filterObject内进行另一次查找才能获得所需的内容。 有任何想法吗?
Underscore的filter
方法将返回“父”对象,但将滤除与条件语句不匹配的对象。 在这种情况下,如果只有1个结果,则可以像访问数组一样访问它。 例如:
var filterObj = _.filter(filtersPath, function(obj) {
return _.where(obj.filters, {id: prefilterCat}).length > 0;
})[0];
上面的示例将获取从filter方法返回的第一个子级。
根据您的问题和代码,我假设这样的数据结构:
var filtersPath = [
{
filters: [
{id: 0},
{id: 1}
]
},
{
filters: [
{id: 5},
{id: 42}
]
}
];
现在,您可以获取所有“父对象”(已经完成)的数组,这些数组具有包含对象ID匹配的对象的过滤器数组:
_.filter(filtersPath, function(obj) {
return _.find(obj.filters, { id: 5 });
});
这样做的好处是,一旦找到一个值,它将停止搜索值,而不是总是遍历整个列表。
如果您想实际获得一个数组作为结果,这是一个简单的映射操作:
_.chain(filtersPath)
.filter(function(obj) {
return _.find(obj.filters, { id: 5 });
})
.map(function(obj) {
return obj.filters;
})
.value();
如果您只想获取第一个匹配的对象,则甚至不需要使用过滤器或地图:
_.find(filtersPath, function(obj) {
return _.find(obj.filters, { id: 5 });
})
.filters;
使用lo-dash ,此操作将更容易一些:
_.find(filtersPath, { filters: [{ id: 5 }] }).filters
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.