поиск во вложенном массиве объектов js - PullRequest
1 голос
/ 28 февраля 2020

У меня есть вложенный массив объектов, и я пытаюсь найти в нем строку. Как только я нахожу это, я хотел бы вернуть содержащий объект. Вот мой код:

const myArray = [{
    label: "Home",
    last: "odlir",
    children: [{
        label: "Home 1",
        last: "odlir1",
        children: [{
          label: "Home 2",
          last: "odlir2"
        }, {
          label: "Home 3",
          last: "odlir3"
        }]
      },
      {
        label: "Home 4",
        last: "odlir4",
        children: [{
          label: "Home 5",
          last: "odlir5"
        }, {
          label: "Home 6",
          last: "odlir6"
        }]
      }
    ]
  },
  {
    label: "dash",
    last: "gom"
  },
  {
    label: "principal",
    last: "asd"
  }
];

function contain(obj, string) {
  if (obj == null)
    return false;

  if (obj.last == string)
    return obj;

  if (typeof obj.children == 'undefined')
    return false;

  for (let i = 0; i < obj.children.length; i++) {
    if (contain(obj.children[i], string))
      return obj;
  }
  return false;
}

function getObject(array, string) {
  for (let i = 0; i < array.length; i++) {
    if (contain(array[i], string)) {
      return array[i];
    }
  }
}

console.log('test', getObject(myArray, 'odlir6'));

Я возвращаю нужный объект, родительский объект и даже деда. Вот фрагмент стека этого кода: https://stackblitz.com/edit/js-hgchmx

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете использовать рекурсивный подход и сохранять объект paren для каждого вложенного вызова.

  1. Объявить result, позже эта переменная содержит родительский объект.

  2. Проверьте, является ли данная переменная не null, а объектом. Выйдите, если нет.

  3. Итерируйте значения из объекта с коротким замыканием и

    • проверьте, равно ли значение искомой строке, затем вернитесь с присваивание объекта.
    • в противном случае возвращает результат рекурсивного вызова.

function getObject(object, string) {
    var result;
    if (!object || typeof object !== 'object') return;
    Object.values(object).some(v => {
        if (v === string) return result = object;
        return result = getObject(v, string);
    });
    return result;
}

const
    array = [{ label: "Home", last: "odlir", children: [{ label: "Home 1", last: "odlir1", children: [{ label: "Home 2", last: "odlir2" }, { label: "Home 3", last: "odlir3" }] }, { label: "Home 4", last: "odlir4", children: [{ label: "Home 5", last: "odlir5" }, { label: "Home 6", last: "odlir6" }] }] }, { label: "dash", last: "gom" }, { label: "principal", last: "asd" }];

console.log(getObject(array, 'odlir6'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...