如何在JavaScript中将对象的所有值设置为null?

问题描述:

我需要设置一些对象的所有属性为null。 但是这个对象可能很大,所以我不能一个接一个地去做。如何在JavaScript中将对象的所有值设置为null?

如何一次设置所有属性?

这是一个有用的函数,称为'Object.keys()',它返回一个对象的所有属性名称。

let setAll = (obj, val) => Object.keys(obj).forEach(k => obj[k] = val); 
let setNull = obj => setAll(obj, null); 

非箭头功能版本:

function setAll(obj, val) { 
    /* Duplicated with @Maksim Kalmykov 
     for(k in obj) if(obj.hasOwnProperty(k)) 
      obj[k] = val; 
    */ 
    Object.keys(obj).forEach(function(k) { 
     obj[k] = val 
    }; 
} 
function setNull(obj) { 
    setAll(obj, null); 
} 
+0

请为Object.keys提供参考。另外,请使用正确的术语。 “属性”不正确。最后,如果你要获得所有的功能,不应该将函数定义为'setAll = val => obj => ...',然后'const setNull = setAll(null);'? – 2017-08-26 17:51:42

+0

这个答案仍然没有设置所有的值“一次”。它在属性上循环。 – 2017-08-26 17:52:54

+0

@torazaburo我不是说这是有用的......只是箭头功能大声笑(顺便说一句,几乎不可能立即''一次') –

您可以使用Object.keys()为念贻王在他的回答中提到,或for in,像这样:

for (key in obj) { 
    if (obj.hasOwnProperty(key)) { 
     obj[key] = null; 
    } 
} 

但在这你应该检查hasOwnProperty()

但是这个对象可能很大,所以我不能一个接一个地去做。

“大”你的意思是“数以百万计的物业”,你关心的表现?或者你的意思是“一堆你不知道名称和/或不想列出的属性”?

如何一次设置所有属性?

你不行。无论如何,你必须循环。

不要改变现有对象,而应考虑创建一个新的空对象。它的属性值将是undefined,但这可能取决于您的代码结构。