I have a dynamic object with the following structure:
{
a: {
someKey: {
propOne: '',
enabled: true
}
},
b: {
someKey: {
propOne: '',
enabled: false
}
},
c: {
someKey: {
propOne: '',
enabled: false
}
},
someKey: {
ab: {
propOne: '',
enabled: true
}
}
}
I need to remove the tree with the enabled
false. So in the above example the result should be:
const result = {
a: {
someKey: {
propOne: '',
enabled: true
}
},
d: {
someKey: {
propOne: '',
enabled: true
}
}
}
How can I do this?
答案 0 :(得分:1)
您可以使用值为enabled
的属性false
进行递归检查,并从对象中删除此分支。
function deleteKey(object) {
Object
.keys(object)
.forEach(function (key) {
if (object[key].enabled === false) {
delete object[key];
return;
}
if (object[key] && typeof object[key] === 'object') {
deleteKey(object[key]);
if (!Object.keys(object[key]).length) {
delete object[key];
}
}
});
}
var object = { name: "WHITE_THEME", source: "WHITE_THEME", page: { layout: { grid: "TILES", margin: { enabled: true, left: 15, top: 15, right: 15, bottom: 15 } }, background: { filter: { enabled: false, blur: { enabled: false, value: null, unit: "px" }, brightness: { enabled: false, value: 100, unit: "%" }, contrast: { enabled: false, value: 0, unit: "%" }, grayscale: { enabled: false, value: 0, unit: "%" }, invert: { enabled: false, value: 0, unit: "%" }, opacity: { enabled: false, value: 100, unit: "%" }, saturate: { enabled: false, value: 100, unit: "%" } }, color: { enabled: false, value: "rgba(232, 232, 232, 1)" } } } };
deleteKey(object);
console.log(object);

.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)
With lodash:
result = _.filter(test, o => o.ab.enabled)
答案 2 :(得分:0)
you can use delete
:
var atocken = {
a: {
ab: {
propOne: '',
enabled: true
}
},
b: {
ab: {
propOne: '',
enabled: false
}
}
}
if(atocken.b.ab.enabled === false)
{
delete atocken.b;
}