underline-js-查找嵌套对象
underscore js - finding a nested object
我有一个下划线过滤器,它返回包含我要查找的子对象的父对象。但我希望它只返回子对象。由于它已经在定位子对象以返回父对象,我想知道如何简化代码以只返回子对象。下面是一个例子:
var filterObj = _.filter(filtersPath, function(obj) {
return _.where(obj.filters, {id: prefilterCat}).length > 0;
});
因此,在这里,obj.filter中的嵌套对象,id为prefilterCat,是我想要返回的对象,而不是它的父对象。因此,目前我必须在filterObject中进行另一次查找才能获得所需内容。有什么想法吗?
Undercore的filter
方法将返回"parent"对象,但将过滤掉与条件语句不匹配的对象。在这种情况下,如果只有一个结果,那么您可以像访问数组一样访问它。例如:
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
相关文章:
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- 如何打印嵌套对象的所有值
- 设置嵌套对象属性的更好方法
- 访问嵌套JSON对象的键,其中键是动态的
- 嵌套对象结构
- 如何递归地获取嵌套对象中所有子对象的列表
- 更改嵌套对象的父子相关id
- Node.js:用作对象嵌套元素名称的变量
- Sailsjs创建对象-嵌套创建
- Jquery $.ajax 获取响应与将“this”对象嵌套传递到“success”回调函数冲突
- 从嵌套属性数组中获取对象嵌套值
- 将对象嵌套在另一个数组中
- javascript对象嵌套回调
- 当被引用对象嵌套在ExtJS 5.0.0中时,如何读取它
- 如何在不知道其位置的情况下删除Mongo对象(嵌套的2个数组)
- 排序嵌套在对象中的数组,该对象嵌套在另一个对象中
- Javascript对象嵌套
- 在Angular中创建多维/嵌套对象(嵌套forEach循环)
- 仅列出jquery中包含json对象嵌套的所有键
- 如何将一个javascript对象嵌套在另一个对象中