如何循环遍历每个对象的嵌套属性,并将它们全部设置为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;
}
}
}
}
答案 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)