У меня есть список объектов (дерево с отношениями родитель-потомок, которое go до более глубокого уровня):
const treeItems = [
{
id: 'parent1',
label: 'Welcome',
value:'noted',
parent: 'root',
expanded: true,
enabled: false,
state: 'SUCCESS',
children: [
{
id: 'child1',
label: 'To',
value:'noted1',
parent: 'child1',
expanded: true,
enabled: false,
state: 'SUCESS',
children: [
{
id: 'child1.1',
label: 'JavaScript',
value:'noted2',
parent: 'child1.1',
expanded: true,
enabled: false,
state: 'SUCCESS',
children: [],
},
],
},
],
},
{
id: 'parent2',
label: 'Welcome',
value:
'',
parent: 'root',
expanded: true,
enabled: false,
state: 'FAILED',
children: [
{
id: 'child2',
label: 'JavaScript',
value: '',
parent: 'parent2',
enabled: false,
state: 'SUCCESS',
expanded: true,
children: [],
},
],
},
];
И у меня есть список ошибок, как показано ниже: -
const errorsList = [{id:'child1',success:false},{id:'parent2',success:false},{id:'child1.1',success:false}];
Моя цель - проверить errorsList
, и если есть какой-либо идентификатор, который соответствует treeItems
, мне нужно изменить свойство state
этого treeItem на 'FAILED'.
Например : В приведенном выше случае id: child1 находится в errorsList
, поэтому мне пришлось бы найти id
child1
в treeItems и изменить его состояние с SUCCESS
на FAILED
. И это должно быть go для всех ошибок, которые доступны в списке ошибок.
Я написал для него лог c ниже, но этот метод требует больше времени для выполнения (от 3 до 4 секунды в зависимости от глубины treeItems
. Ищу более тонкое решение.
function setFailedItemsToStatusFailed(treeItems, errorsList) {
treeItems.forEach(item=> {
errorsList.forEach(error => {
if (item) {
if (item.id === error.id) {
item.state = 'FAILED';
return;
} else if (item.children && item.children.length) {
setFailedItemsToStatusFailed(item.children, errorsList);
}
}
});
});
}