Lodash - найти значение во вложенных объектах - PullRequest
1 голос
/ 22 сентября 2019

У меня есть структура объекта, как указано ниже в ссылке

https://jsonblob.com/3511b867-dd4b-11e9-85e4-63b804994c26

Я хочу выполнить поиск, скажем, firstname: Dianca во всех узлах в persons, используя lodash.

Я не хочу кодировать имена узлов, так как я упомянул множество узлов для поиска.Мне нужно искать его динамически в узле person независимо от того, где он находится под структурой объекта.

Я пробовал способ, подобный приведенному ниже, но тщетно (как в зашифрованном виде)

_.filter(users, o => 
  _.some(o.Positions, ['persons.firstname', 'Dianca'])
)

и во-вторых, я хочу получить все имена в узле persons и сохранить его в новом массиве.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 сентября 2019

Что за вопрос !!Мне понадобился год, чтобы построить логику для вас:)

function findUser(data, firstName) {

    var object;
    data.some(function f(a) {
        if (a.firstname == firstName) {
            object = a;
            return true;
        }

        _.each(Object.keys(a), function (value, key) {
            // loops through json objects in waypath
            if (!_.isEmpty(object)) {
                return false; // stop once we get the user
            }
            if (isNaN(value)) {
                // only data with string keys need to iterate more
                // when there is an array with elements
                if (Array.isArray(a[value]) && a[value].length != 0) {
                    a[value].some(f); // recursion (Didn't use return because we are in loop)
                } else if (!_.isEmpty(a[value])) {
                    // when there is an object within object
                    _.each(Object.keys(a[value]), function (val, key2) {
                        if (Array.isArray(a[value][val]) && a[value][val].length != 0) {
                            a[value][val].some(f); // recursion
                        }
                    });
                }
            }
        });
    });

    return object;
}

console.log(findUser(data, "Phyllis"));

Должно быть именно то, что вам нужно.Наслаждайтесь !!

...