如何清空JS对象?

时间:2016-09-05 05:00:03

标签: javascript angularjs javascript-objects

我有像

这样的对象
var person = {'id':null, 'name':'John Doe'}

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

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

我使用angular.mergeperson的值更新为personInDB的值。

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

5 个答案:

答案 0 :(得分:3)

  

我想清空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()将使用新值覆盖旧值,而无需先清空对象。 (您是否尝试允许旧版本的对象可能具有新版本中不再存在的属性的案例(未显示)?)

答案 1 :(得分:2)

如果你想要清空' id'仅

person['id']=null;

如果要清空人物对象的所有属性,则

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

答案 2 :(得分:1)

如果我理解正确,您似乎认为在合并新的对象之前需要清空原始对象,否则将无法使用数据库中的属性。但我并不认为这是事实。我查看angular.merge的{​​{3}},它似乎将源对象中的每个属性复制(即:覆盖)到目标对象。所以你根本不需要清空它,只需进行合并,就可以使用数据库对象上的所有值。

答案 3 :(得分:0)

好吧,为了避免破坏angularjs的数据绑定,我现在手动更新每个字段:

var person = {id : null, name: 'toto'};

// Ajax call
person.id = ajaxres.id;
person.name = ajaxres.name

答案 4 :(得分:0)

如果您使用的是ECAM6,则可以使用Destructuring_assignment

[person] = [personInDB ] //Object {id: 1234, name: "John Doe"}

OR

你可以这样。

var arrKeys = Object.keys(person);

  arrKeys.forEach(function(val,key){  

      person[val] =   personInDB[val];

    })