JavaScript установил все свойства вложенных объектов в null - PullRequest
0 голосов
/ 20 ноября 2018

Как я могу зациклить, хотя каждый из этих объектов вложил свойства и установить их все в нуль?Мне нужно пройти только 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,
    }
}

Я пробовал это, но это входит в объект 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 голосов
/ 20 ноября 2018

Поскольку вам нужно пройти только два уровня, вы можете просто зациклить ключи дочерних объектов:

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)
0 голосов
/ 20 ноября 2018

Делает ли это уловку?

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...