我正在嘗試根據事件將所有鍵設定為 false 或 true。
const odba = {
"all": false,
"allA": false,
"allB": false,
"allC": {
"allD": false,
"allE": { "allF": true },
}
}
Object.keys(odba).forEach(function(key, value) {
return odba[key] = false;
})
console.log(odba);
上面的代碼導致:
{
all: false,
allA: false,
allB: false,
allC: false
}
然而這是不正確的,因為嵌套物件被忽略了。我也嘗試了以下方法:
Object.keys(odba).forEach(function(key, value) {
if(typeof key === 'object')
{
Object.keys(key).forEach(function(k, v){
return odba[k] = false;
})
}
return odba[key] = false;
})
uj5u.com熱心網友回復:
您可以創建一個函式,您可以遞回呼叫嵌套物件值以將其值設定為false. 通過檢查一個值是否是一個物件,您可以使用該物件值再次呼叫該函式,例如:
function allToFalse(obj) {
Object.keys(obj).forEach(function(key) {
const value = obj[key];
if(Object(value) === value) // if value is an object
allToFalse(value);
else
obj[key] = false;
});
}
const odba = { "all": false, "allA": false, "allB": false, "allC": { "allD": false, "allE": { "allF": true }, } }
allToFalse(odba);
console.log(odba);
以上將修改您的物件(就像您當前的代碼一樣)。如果你想創建一個函式來生成一個新物件并保持舊物件不變,那么你可以使用Object.fromEntries()with.map()來構建一個新物件,再次使用遞回來構建你的嵌套物件。例如:
function allToFalse(obj) {
return Object.fromEntries(Object.entries(obj).map(([key, val]) =>
[key, Object(val) === val ? allToFalse(val) : false]
));
}
const odba = { "all": false, "allA": false, "allB": false, "allC": { "allD": false, "allE": { "allF": true }, } }
console.log(allToFalse(odba));
您還可以使用“hack”JSON.parse()及其恢復功能。首先,您可以將物件字串化為 JSON 字串,然后將其決議回物件,在該物件中使用 reviver 指定false新值。JSON.parse()將為您處理遞回,但此方法效率不高,可能會使您丟失一些屬性(請參見此處):
function allToFalse(obj) {
return JSON.parse(JSON.stringify(obj), (key, val) => typeof val === "boolean" ? false : val);
}
const odba = { "all": false, "allA": false, "allB": false, "allC": { "allD": false, "allE": { "allF": true }, } }
console.log(allToFalse(odba));
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/528742.html
標籤:javascript目的
