@Vladimir185

Как проверить всю вложенность массива объектов на дубликаты?

Есть такой код:
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)
    );
};


Также для схематичности структура на листке: 64b53f0adb973727564853.png
  • Вопрос задан
  • 142 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы