У меня есть глубоко вложенный объект, который мне нужно искать, чтобы удалить определенные ключи.Ключи для удаления хранятся в массиве, указанном в массиве 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": []
}
}