[英]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.