Найти индекс динамического многомерного массива / json с идентификаторами совпадений

Либо вы

  1. дважды читаете файл - один раз, чтобы подсчитать количество строк, второй раз, чтобы извлечь случайную строку, или
  2. использовать резервуар выборка

0
задан Ahadul 18 January 2019 в 13:02
поделиться

2 ответа

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

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;
}
0
ответ дан Bálint 18 January 2019 в 13:02
поделиться

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

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
ответ дан Nina Scholz 18 January 2019 в 13:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: