当尝试使用未定义属性进行筛选时,Lodash将排除项
Lodash excludes items when trying to filter with an undefined property
我使用lodash _.where
来过滤数组。当filters
的属性未定义时,lodash尝试匹配未定义的值,而不是完全忽略该属性。
var list = [{
type: 'something',
units: [{bar: 1}]
}];
var filters = {};
var filteredlist = _(list)
.where(filters.type ? {
type: filters.type
} : {})
.where(filters.view === 'foo' && filters.bar ? {
units: [{
bar: +filters.bar
}]
} : {})
.value();
filteredlist;
上面返回list
中的唯一项。
但是我必须检查filters
中的属性是否存在,然后使用_.where
或_.filter
来过滤我的list
。
如果我只是做了:
var filteredlist = _(list)
.where({
type: filters.type,
units: [{
bar: +filters.bar
}]
})
.value();
我没有得到任何回报,因为filters.type
和filters.bar
没有定义…
是否有一个本地的方式,我可以有lodash让项目通过_.where
或_.filter
(或替代),如果我试图过滤的属性是未定义的或假的?最好没有mixin,但如果你有一个优雅的解决方案,请随时分享。
我认为这可能是你正在寻找的大致范围:
_(list).filter(function (item) {
return _.has(filters, 'type') ? _.isEqual(filters.type, item.type) : true;
}).value()
但是,如果您需要检查过滤器中的所有键,那么您可能需要这样做:
_(list).filter(function (item) {
var pass = true;
_.each(filters, function (v, k) {
if (!_.isEqual(item[k], v)) {
pass = false;
}
});
return pass;
}).value()
相关文章:
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 使用AngularJS中的筛选器更新给定的表
- 淘汰搜索/筛选
- Lodash从集合创建集合
- Lodash 从值数组中查找数组中的值
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- Angular JS Filter-通过3个复选框进行筛选
- 使用下拉列表筛选列表(ul>li)
- Lodash懒惰链不'It’我不管用
- Lodash映射并返回唯一
- 应该如何在typescript中键入lodash流函数
- 使用lodash的特定对象特性值
- JQuery DataTable列筛选器-选择下拉筛选器
- Regex,用于从字符串中筛选关键字
- 使用lodash javascript筛选子集合
- Lodash关于使用搜索词和多个属性名称进行筛选的帮助
- 当尝试使用未定义属性进行筛选时,Lodash将排除项
- 使用lodash按键筛选嵌套对象
- 使用lodash从数组中筛选冗余对象
- 使用对象引用 Lodash 进行筛选