JavaScript将所有嵌套对象属性设置为null

时间:2018-11-20 16:03:47

标签: javascript for-loop javascript-objects

如何循环遍历每个对象的嵌套属性,并将它们全部设置为null?我只需要深入2层,那么作为对象的任何prop都需要为空。

var objs = {
    a: {
        prop1: {id: null, ctx: CanvasRenderingContext2D},
        prop2: true,
        prop3: null,
        prop4: null,
        prop5: true,
        prop6: null,
        prop7: null,
        prop8: true,
        prop9: null,
        prop10: null,
        prop11: true,
    },
    b: {
        prop1: {id: null, ctx: CanvasRenderingContext2D},
        prop2: true,
        prop3: null,
        prop4: null,
        prop5: true,
        prop6: null,
        prop7: null,
        prop8: true,
    },
    c: {
        prop1: {id: null, ctx: CanvasRenderingContext2D},
        prop2: true,
        prop3: null,
        prop4: null,
        prop5: true,
    }
}

我已经尝试过了,但是它进入了prop1对象,我不想这么做。

function nullify  (obj) { 
    for(key in obj) { 
        if (typeof obj[key] == "object") {
          obj[key] = nullify(obj[key]);
        }
        else if(obj[key] != null) {
            obj[key] = null;
        }
   }
   return obj;
}

nullify  (objs)

我也尝试过这种方法,但这是通过外键的每个字母而不是内部属性的

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

2 个答案:

答案 0 :(得分:4)

由于您只需要进入两个级别,因此可以循环遍历子对象的键:

var objs = {a: {prop1: {id: null, ctx: `CanvasRenderingContext2D`},prop2: true,prop3: null,prop4: null,prop5: true,prop6: null,prop7: null,prop8: true,prop9: null,prop10: null,prop11: true,},b: {prop1: {id: null, ctx: `CanvasRenderingContext2D`},prop2: true,prop3: null,prop4: null,prop5: true,prop6: null,prop7: null,prop8: true,},c: {prop1: {id: null, ctx: `CanvasRenderingContext2D`},prop2: true,prop3: null,prop4: null,prop5: true,}}

Object.values(objs).forEach(val => {
  for (key in val) val[key] = null
})
console.log(objs)

答案 1 :(得分:0)

这有用吗?

function nullify(obj, depth) {
    depth = depth || 0;
    if (depth > 1) return obj;
    for(key in obj) {
        if (typeof obj[key] == "object") {
          obj[key] = nullify(obj[key], depth + 1);
        }
        else if(obj[key] != null) {
            obj[key] = null;
        }
   }
   return obj;
}

编辑:

在不传递depth参数的情况下调用它:nullify(objs)