Найти элемент в массиве x глубины Javascript

Можно ли использовать метод find() в массиве глубины x?

Например, предположим, что у меня есть следующий массив объектов, назовите его test:

[
    {
        "id": "1",
        "title": "First",
    },
    {
        "id": "2",
        "title": "Second",
        "movies": [
            {
                "id": "3",
                "title": "Happy Gilmore",
                "Actors": [
                    {
                        "id": "4",
                        "title": "John Doe",
                    },
                    {
                        "id": "5",
                        "title": "Jane Doe",
                    },
                ],
                "Producers": [
                    {
                        "id": "6",
                        "title": "Max Smith",
                    },
                    {
                        "id": "7",
                        "title": "Richard Rocky",
                    },
                ],
            },
            {
                "id": "10",
                "title": "Billy Madison",
                "Actors": [
                    {
                        "id": "40",
                        "title": "John Smith",
                    },
                    {
                        "id": "50",
                        "title": "Alex Doe",
                    },
                ],
                "Producers": [
                    {
                        "id": "60",
                        "title": "Bob Smith",
                    },
                    {
                        "id": "70",
                        "title": "Polly Rocky",
                    },
                ],
            }
        ]
    }
]

Предположим, я ищу идентификатор «2». Я могу использовать метод find() для поиска на первом уровне массива и вернуть нужный объект, выполнив test.find(element => element.id === "2").

Однако предположим, что сейчас я ищу вхождение с идентификатором 4. Как видно из приведенного выше JSON, этот элемент находится в подмассиве внутри test. Поэтому есть ли способ, где я все еще могу искать test, чтобы найти элемент с id = 4?

Отвечает ли это на ваш вопрос? Как рекурсивно найти ключ значения во вложенном объекте

kmoser 11.05.2022 19:15

Не совсем потому, что то, что вы связали, — это поиск по объекту, который может содержать вложенные объекты (метод find() не работает с объектами). В моем случае массив может содержать вложенные массивы глубины x.

Adam 11.05.2022 19:19

Невозможно с find, вам нужна рекурсия.

epascarello 11.05.2022 19:28

@ Адам Как насчет Поиск вложенных объектов, содержащих значение?

kmoser 11.05.2022 20:47
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
34
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

find не может этого сделать, но вы можете использовать его в рекурсивном подходе:

function findDeep(arr, predicate) {
    let res = arr.find(predicate);
    if (res !== undefined) return res;
    for (let obj of arr) {
        for (let value of Object.values(Object(obj)).filter(Array.isArray)) {
            res = findDeep(value, predicate);
            if (res !== undefined) return res;
        }
    }
}

let test = [{"id": "1","title": "First",},{"id": "2","title": "Second","movies": [{"id": "3","title": "Happy Gilmore","Actors": [{"id": "4","title": "John Doe",},{"id": "5","title": "Jane Doe",},],"Producers": [{"id": "6","title": "Max Smith",},{"id": "7","title": "Richard Rocky",},],},{"id": "10","title": "Billy Madison","Actors": [{"id": "40","title": "John Smith",},{"id": "50","title": "Alex Doe",},],"Producers": [{"id": "60","title": "Bob Smith",},{"id": "70","title": "Polly Rocky",},],}]}];

let res = findDeep(test, obj => obj.id == "4");

console.info(res);

Другие вопросы по теме