Найти индекс динамического многомерного массива / json с идентификаторами совпадений - PullRequest
0 голосов
/ 18 января 2019

спасибо за проверку, У меня есть динамический массив, который будет содержать несколько элементов / объектов. Я хочу индексный номер этого массива, если предоставленный идентификатор совпадает с одним из его содержащихся

Но потому что это динамически генерируемый массив / json он может иметь любое количество многомерного массива внутри дочерних элементов и т. д. и т. п.

так есть ли способ найти номер индекса с идентификатором совпадений.

var data = [
            {

                id:1,
                child:[
                    {
                        id: 2,
                        child: [
                            {
                                id: 3,
                                child: []
                            },
                            {
                                id:4,
                                child:[
                                    {
                                        id:44,
                                        child:[
                                            {
                                                id:55,
                                                child:[]
                                            }
                                        ]
                                    }
                                ]
                            }
                        ]

                    },
                    {
                        id:5,
                        child:[
                            {
                                id:6,
                                child:[]
                            }
                        ]
                    }
                ]
            }
        ]

Предположим, я хочу получить индекс массива, где id равен 4. Мне нужно разработать логику / функцию, которая будет возвращать -> data[0]['child'][0]['child'][1]

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Вы можете использовать полный динмейский подход, зная некоторые ключи.

function findPath(object, id) {
    var path;

    if (!object || typeof object !== 'object') return;
    if (object.id === id) return [];

    Object.entries(object).some(([k, o]) => {
        var temp;
        if (temp = findPath(o, id, path = [])) {
            path = [k, ...temp];
            return true;
        }
    });
    return path;
}

var data = [{ id: 1, child: [{ id: 2, child: [{ id: 3, child: [] }, { id: 4, child: [{ id: 44, child: [{ id: 55, child: [] }] }] }] }, { id: 5, child: [{ id: 6, child: [] }] }] }];

console.log(findPath(data, 44));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 18 января 2019

Сделать это рекурсивно

function findId(obj, id, currentPath = "") {
    // Go through every object in the array
    let i = 0;
    for (let child of obj) {
        // If id matches, return
        if (child.id == id) return currentPath + `[${i}]`;
        // Else go through the children, if we find anything there, return it
        let next = findId(child.child, id, currentPath + `[${i}]['child']`);
        if (next) return next;
        i++;
    }

    // We didn't find anything
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...