如何清空一个JS对象?

新手上路,请多包涵

我有一个像

var person = {'id':null, 'name':'John Doe'}

将对象值插入数据库后,我将从服务器获取另一个对象:

 var personInDB = {'id':1234, 'name':'John Doe'}

我已经使用 angular.merge 使用更新的值 personpersonInDB 的值。

但是,我想在应用 angular.merge 之前清空 person 对象,这样我只能获取数据库中的值。我不想将新的空对象分配给 person,因为这会破坏角度的数据绑定。

原文由 Barun 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 384
2 个回答

我想清空 person 对象…我不想将新的空对象分配给 person

我不知道任何类型的内置对象 .deleteAllProperties() 方法,因此会循环遍历属性并分别调用 delete 。以下是一种相当简洁的方法:

 Object.keys(person).forEach(k => delete person[k])

或者稍微长一点的非 ES6 箭头函数版本支持回到 IE9:

 Object.keys(person).forEach(function(k) { delete person[k]})

对于更旧的 IE,只需使用 for..in 循环(带有 .hasOwnProperty() 检查)。

显然,您可以将上述任何内容放入函数中以便于重用:

 function emptyObject(obj) {
  Object.keys(obj).forEach(k => delete obj[k])
}

emptyObject(person)

请注意,虽然这回答了您的问题,但我不确定您为什么认为您需要这样做。您在问题中显示的示例前后具有相同的两个属性,因此 angular.merge() 只会用新值覆盖旧值,而无需先清空对象。 (您是否正在尝试考虑一种情况(未显示),即您的对象的旧版本可能具有新版本中不再存在的属性?)

原文由 nnnnnn 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果你只想清空“id”

 person['id']=null;

如果你想清空person对象的所有属性,那么

Object.keys(person).forEach(key => person[key]=null);

原文由 Karpak 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题