我有一个看起来像这样的对象:
var searchFilter = {_id: XXX, approved: true}
用于驱动Meteor集合搜索过滤器。然后我有一对文本框允许用户输入一系列日期,在这种情况下,我更新过滤器以触发Meteor反应性地重新运行过滤器,如下所示:
// Some Meteor event-handler...
var val = // code to pull val in...not important...
var searchFilter = Session.get('searchFilter');
if (!val || val === '') {
delete searchFilter.created_on;
} else {
searchFilter.created_on = {$gte: new Date(val)};
}
Session.set('searchFilter', searchFilter);
删除create_on子对象的else对一个字段很有用,但在我的代码中我有两个字段,一个用于起始范围,一个用于结束范围。我需要做的是删除created_on:{$ gte},然后检查created_on是否为"为空",如果是,则删除整个事情。不过,我不知道我是怎么做的。这可能吗?我可以访问jQuery和underscore.js作为库,如果有帮助的话。
答案 0 :(得分:1)
您可以使用Object.getOwnPropertyNames
查看是否已在对象上定义任何属性。这将返回一个属性名称数组,因此只需检查它的长度是否大于0.
// create the filter with $gte set
var searchFilter = {};
searchFilter.created_on = {$gte: new Date(56378563786)};
// check if any properties are defined
var hasProps = Object.getOwnPropertyNames(searchFilter.created_on).length > 0;
alert("Has properties: " + hasProps);
// now delete $gte
delete searchFilter.created_on.$gte;
// check if any properties are defined
var hasProps = Object.getOwnPropertyNames(searchFilter.created_on).length > 0;
alert("Has properties: " + hasProps);