簡體   English   中英

JavaScript將所有嵌套對象屬性設置為null

[英]JavaScript set all nested object properties to null

如何循環遍歷每個對象的嵌套屬性並將它們全部設置為null? 我只需要深入2層,因此作為對象的任何prop也必須為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;
            }
        }
    }
}

由於您只需要進入兩個級別,因此您可以循環遍歷子對象的鍵:

 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) 

這能達到目的嗎?

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM