JavaScript将所有嵌套对象属性设置为空
如何循环遍历每个对象的嵌套属性并将它们全部设置为null?我只需要深入两层,因此任何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,
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中使内部的值为空