确定Javascript中的对象是否具有任何属性

时间:2014-12-11 16:46:55

标签: javascript meteor

我有一个看起来像这样的对象:

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作为库,如果有帮助的话。

1 个答案:

答案 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);