Как рекурсивно извлечь данные массива объектов?

Для рекурсивного извлечения данных массива объектов в TypeScript можно использовать рекурсивную функцию. Давайте рассмотрим пример.

Предположим, у нас есть массив объектов, каждый из которых имеет следующую структуру:

type NestedObject = {
  id: number;
  name: string;
  children: NestedObject[];
};

Мы хотим рекурсивно извлечь все name из данного массива объектов.

Для начала создадим функцию extractNames, которая будет принимать массив объектов типа NestedObject[] и возвращать массив строк (string[]) с извлеченными именами:

function extractNames(objects: NestedObject[]): string[] {
  // Создаем пустой массив, в который будем складывать извлеченные имена
  const names: string[] = [];

  // Итерируемся по каждому объекту в переданном массиве
  for (const obj of objects) {
    // Извлекаем имя объекта и добавляем его в массив имен
    names.push(obj.name);

    // Если объект имеет дочерние объекты, вызываем функцию extractNames для дочерних объектов
    if (obj.children.length > 0) {
      const childNames = extractNames(obj.children);
      names.push(...childNames); // Добавляем извлеченные имена дочерних объектов в массив имен
    }
  }

  // Возвращаем массив имен
  return names;
}

Теперь мы можем использовать эту функцию для извлечения имен из массива объектов. Вот пример использования:

// Создаем тестовый массив объектов
const objects: NestedObject[] = [
  {
    id: 1,
    name: "Object 1",
    children: [
      {
        id: 2,
        name: "Object 2",
        children: []
      },
      {
        id: 3,
        name: "Object 3",
        children: [
          {
            id: 4,
            name: "Object 4",
            children: []
          }
        ]
      }
    ]
  },
  {
    id: 5,
    name: "Object 5",
    children: []
  }
];

// Извлекаем имена из массива объектов
const names = extractNames(objects);

// Выводим имена в консоль
console.log(names); // ["Object 1", "Object 2", "Object 3", "Object 4", "Object 5"]

Таким образом, мы рекурсивно извлекли все имена из массива объектов с помощью функции extractNames.