如何清空一个JS对象?
How to empty an JS Object?
我有一个像
这样的对象
var person = {'id':null, 'name':'John Doe'}
将对象值插入数据库后,我将从服务器获取另一个对象:
var personInDB = {'id':1234, 'name':'John Doe'}
我已经使用 angular.merge
将 person
的值更新为 personInDB
的值。
但是,我想在应用 angular.merge
之前清空 person
对象,这样我只能获取数据库中的值。我不想将新的空对象分配给 person,因为这会破坏 angular.
中的数据绑定
嗯,为了避免破坏 angularjs 的数据绑定,我现在手动更新每个字段:
var person = {id : null, name: 'toto'};
// Ajax call
person.id = ajaxres.id;
person.name = ajaxres.name
如果我没理解错的话,您似乎认为在合并新对象之前需要清空原始对象,否则将不会使用数据库中的属性。我不认为是这样。我查看了 angular.merge
的 source,它似乎将每个 属性 从源对象复制(即:覆盖)到目标对象。所以你根本不需要清空它,只需进行合并,数据库对象上的所有值都会被使用。
I want to empty person
object...I don't want to assign new empty object to 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()
只会用新值覆盖旧值,而无需先清空对象。 (您是否尝试考虑一种情况(未显示),即您的对象的旧版本可能具有新版本中不再存在的属性?)
如果你只想清空 'id'
person['id']=null;
如果要清空person对象的所有属性,那么
Object.keys(person).forEach(key => person[key]=null);
如果您使用的是ECAM6,那么您可以使用Destructuring_assignment
[person] = [personInDB ] //Object {id: 1234, name: "John Doe"}
或
你可以这样吃
var arrKeys = Object.keys(person);
arrKeys.forEach(function(val,key){
person[val] = personInDB[val];
})
我有一个像
这样的对象var person = {'id':null, 'name':'John Doe'}
将对象值插入数据库后,我将从服务器获取另一个对象:
var personInDB = {'id':1234, 'name':'John Doe'}
我已经使用 angular.merge
将 person
的值更新为 personInDB
的值。
但是,我想在应用 angular.merge
之前清空 person
对象,这样我只能获取数据库中的值。我不想将新的空对象分配给 person,因为这会破坏 angular.
嗯,为了避免破坏 angularjs 的数据绑定,我现在手动更新每个字段:
var person = {id : null, name: 'toto'};
// Ajax call
person.id = ajaxres.id;
person.name = ajaxres.name
如果我没理解错的话,您似乎认为在合并新对象之前需要清空原始对象,否则将不会使用数据库中的属性。我不认为是这样。我查看了 angular.merge
的 source,它似乎将每个 属性 从源对象复制(即:覆盖)到目标对象。所以你根本不需要清空它,只需进行合并,数据库对象上的所有值都会被使用。
I want to empty
person
object...I don't want to assign new empty object toperson
我不知道有任何类型的内置对象 .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()
只会用新值覆盖旧值,而无需先清空对象。 (您是否尝试考虑一种情况(未显示),即您的对象的旧版本可能具有新版本中不再存在的属性?)
如果你只想清空 'id'
person['id']=null;
如果要清空person对象的所有属性,那么
Object.keys(person).forEach(key => person[key]=null);
如果您使用的是ECAM6,那么您可以使用Destructuring_assignment
[person] = [personInDB ] //Object {id: 1234, name: "John Doe"}
或
你可以这样吃
var arrKeys = Object.keys(person);
arrKeys.forEach(function(val,key){
person[val] = personInDB[val];
})