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

AdR*_*ock 2 javascript for-loop javascript-objects

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

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,
    }
}
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它进入了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)
Run Code Online (Sandbox Code Playgroud)

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

for (obj in objs) {
    if (objs.hasOwnProperty(obj)) {
        for (key in obj) {
            if (obj.hasOwnProperty(key)) {
                obj[key] = null;
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*yer 5

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

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)
Run Code Online (Sandbox Code Playgroud)