【发布时间】:2019-09-15 08:24:23
【问题描述】:
我有一个深度嵌套的对象,我需要搜索它以删除某些键。要删除的键存储在removeKeys 数组中指示的数组中。
目前,该函数仅过滤顶级对象,但可以很好地缩放其余对象,它只是不过滤子对象。我将如何正确减少整个对象以获得所需的输出?
初始未过滤对象:
let item = {
"label": "test",
"id": "test",
"styles": {
"label": "Styles",
"styles": {
"test": {
"test": "test",
"label": "test",
"test1": {
"label": "test",
"image": {
"label": "test",
"type": "test",
"value": "test",
"autoSelect": "",
"id": ""
}
}
}
}
},
"test": {
"label": "test",
"test": []
}
}
要从对象中删除的键:
const removeKeys = ["label", "type", "autoSelect"];
过滤嵌套对象的递归函数:
let filterObject = filterNestObject(item);
function filterNestObject(item) {
return Object.keys(item)
.filter(key => {
if (typeof item[key] === 'object') filterNestObject(item[key]);
if (!removeKeys.includes(key)) return true;
return false
})
.reduce((object, key) => {
return {
...object,
[key]: item[key]
};
}, {});
}
预期的结果是:
{
"id": "test",
"styles": {
"styles": {
"test": {
"test": "test",
"test1": {
"image": {
"value": "test",
"id": ""
}
}
}
}
},
"test": {
"test": []
}
}
【问题讨论】:
标签: javascript arrays object recursion filter