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

JavaScript将所有嵌套对象属性设置为空,javascript,for-loop,javascript-objects,Javascript,For Loop,Javascript Objects,如何循环遍历每个对象的嵌套属性并将它们全部设置为null?我只需要深入两层,因此任何props对象也需要为null var objs = { a: { prop1: {id: null, ctx: CanvasRenderingContext2D}, prop2: true, prop3: null, prop4: null, prop5: true, prop6: null,

如何循环遍历每个对象的嵌套属性并将它们全部设置为null?我只需要深入两层,因此任何
prop
s对象也需要为null

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;
            }
        }
    }
}

这能奏效吗

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)

因为您只需要执行两个级别,所以只需在子对象的键上循环即可:

var objs={a:{prop1:{id:null,ctx:`CanvasRenderingContext2D`},prop2:true,prop3: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,},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)
数据结构要求是数组而不是嵌套对象。然后,您可以使用非常基本的语法进行循环。它不会在第二级即ctx中使内部的值为空