Задать вопрос
Riveran
@Riveran
Astartes

Как в структуре с неизвестной вложенностью найти объект со свойством, имеющим определённое значение?

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

Например, есть массив:

let arrayData = [
    {
        value: 'test',
        newArray: [
            {
                value: 'zero',
                newArray: [
                    {
                        value: 'myValue'
                    }
                ]
            }
        ]
    }
]

и в нём необходимо найти и вернуть объект, у которого свойство будет равно 'myValue'.
Как это можно сделать?
  • Вопрос задан
  • 209 просмотров
Подписаться 1 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Какое значение нас интересует: const value = 'myValue';.

Как будем проверять его наличие:

// если речь идёт о каком-то конкретном свойстве
const hasValue = x => x && x.value === value;

// если имя свойства не важно
const hasValue = x => Object.values(x || {}).includes(value);

Чтобы обойти вложенные объекты можно применить рекурсию:

const find = (data, test) =>
  test(data)
    ? data
    : data === Object(data)
      ? Object.values(data).reduce((found, n) =>
          found !== null ? found : find(n, test)
        , null)
      : null;

А можно и не применять:

function find(data, test) {
  for (const stack = [ data ]; stack.length;) {
    const n = stack.pop();
    if (test(n)) {
      return n;
    } else if (n instanceof Object) {
      stack.push(...Object.values(n).reverse());
    }
  }

  return null;
}

Ищем объект: const obj = find(arrayData, hasValue);.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

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

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