Есть такой код:
const arr = [
{ id: 65, name: 'Ааа', parent: null },
{
id: 66,
name: 'Ааа2',
parent: { id: 65, name: 'Ааа', parent: null }
},
{
id: 67,
name: 'Ааа3',
parent: {
id: 66,
name: 'Ааа2',
parent: { id: 65, name: 'Ааа', parent: null }
}
},
{
id: 68,
name: 'Ааа4',
parent: {
id: 67,
name: 'Ааа3',
parent: {
id: 66,
name: 'Ааа2',
parent: { id: 65, name: 'Ааа', parent: null }
}
}
},
{
id: 69,
name: 'Ааа5',
parent: {
id: 68,
name: 'Ааа4',
parent: {
id: 67,
name: 'Ааа3',
parent: {
id: 66,
name: 'Ааа2',
parent: {
id: 65,
name: 'Ааа',
parent: null
}
}
}
}
},
{
id: 70,
name: 'Ааа5-1',
parent: {
id: 68,
name: 'Ааа4',
parent: {
id: 67,
name: 'Ааа3',
parent: {
id: 66,
name: 'Ааа2',
parent: {
id: 65,
name: 'Ааа',
parent: null
}
}
}
}
},
{
id: 71,
name: 'Ааа3-1',
parent: {
id: 66,
name: 'Ааа2',
parent: { id: 65, name: 'Ааа', parent: null }
}
}
];
const isExist = (item) => {
return arr.some(
({ name, parent, id }) =>
item?.name != null &&
item.name.toLowerCase() === name.toLowerCase() &&
(parent?.id === item.parentId || id === item.parentId)
);
};
isExist({
id: 555,
name: 'Ааа2',
parentId: 65
});
Как сделать проверку на существование item'ов по всей вложенности? Т.е. даже если мы передаем функцию name и id === item.parentId, которые встретятся где-то в середине вложенности массива, то все равно выведем, что элемент существует?
Сейчас проверка идет только на 1 уровень:
const isExist = (item) => {
return arr.some(
({ name, parent, id }) =>
item?.name != null &&
item.name.toLowerCase() === name.toLowerCase() &&
(parent?.id === item.parentId || id === item.parentId)
);
};
Также для схематичности структура на листке: