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

时间:2017-08-26 17:16:18

标签: javascript

我需要将某个对象的所有属性设置为null。 但是对象可能非常大,所以我不能一个接一个地做。

如何一次设置所有属性?

8 个答案:

答案 0 :(得分:9)

这是一个名为'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(index in obj) if(obj.hasOwnProperty(index))
            obj[index] = val;
    */
    Object.keys(obj).forEach(function(index) {
        obj[index] = val
    });
}
function setNull(obj) {
    setAll(obj, null);
}

答案 1 :(得分:5)

如果您正在寻找要复制和粘贴的短单行,请使用此

Object.keys(obj).forEach((i) => obj[i] = null);

答案 2 :(得分:4)

  

但是对象可能非常大,所以我不能一个接一个地做。

“大”你的意思是“数以百万计的财产”你是否关注表现?或者你的意思是“一堆你不知道名字的属性,和/或不想列出名单”?

  

如何一次设置所有属性?

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

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

答案 3 :(得分:3)

如果object包含子对象,则要将所有子对象属性设置为null,则递归解决方案如下。

function setEmpty(input){

let keys = Object.keys(input);

    for( key of keys ){

         if(typeof input[key] != "object" ){
             input[key] = null;
         }else{
             setEmpty(input[key]);
         }
    }
    return input;
}

答案 4 :(得分:2)

您可以使用{Nineri Wang在他的回答中提到的Object.keys()for in,如下所示:

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

但在这种情况下,您应该检查hasOwnProperty()

答案 5 :(得分:2)

Lodash可以使用cloneDeepWith进行管理。

我对相同问题的解决方案:

import * as _ from 'lodash';
const bigObj = {"big": true, "deep": {"nested": {"levels": "many" } } };
const blankObj = _.cloneDeepWith(bigObj, (value) => {return _.isObject(value) ? undefined : null});
console.log(blankObj);
// outputs { big: null, deep: { nested: { levels: null } } }

在定制器中返回undefined对我来说并不明显,但是this answer解释说,这样做会触发递归。

答案 6 :(得分:0)

使用Array.reduce的另一种方法。它不会覆盖现有对象。这仅在对象仅具有简单值的情况下有效。

const newObj = Object.keys(originalObj).reduce(
  (accumulator, current) => {
    accumulator[current] = null; 
    return accumulator
  }, {});

答案 7 :(得分:-1)

let values = {
    a:1, 
    b:'', 
    c: {
        a:'', 
        s:4, 
        d: {
            q: '',
            w: 8,
            e: 9
        }
 
    }
}


values;

const completeWithNull = (current) => {
  Object.keys(current).forEach((key) => {
   		current[key] = current[key] === ''? null 
    	: typeof current[key] === 'object' ? completeWithNull(current[key])
    	: current[key]
  });
  
  return current;
};

completeWithNull(values);