Как вывести иерархию массива, в котором есть элементы со значением workControl равным 'intermediate', при неизвестной вложенности?

Какой пример кода можно использовать для демонстрации работы? Вот ссылка на рабочий пример: https://codepen.io/itjustalance/pen/bGzdmLm
  • 25 октября 2023 г. 19:20
Ответы на вопрос 2
Для вывода иерархии массива с неизвестной вложенностью, где элементы имеют значение workControl равное 'intermediate', можно использовать рекурсивную функцию. 

Вот пример кода на JavaScript для демонстрации работы:

```javascript
// Входной массив с неизвестной вложенностью
const data = [
  {
    id: 1,
    name: 'Item 1',
    workControl: 'intermediate',
    children: [
      {
        id: 2,
        name: 'Item 1.1',
        workControl: 'intermediate',
        children: []
      }
    ]
  },
  {
    id: 3,
    name: 'Item 2',
    workControl: 'intermediate',
    children: [
      {
        id: 4,
        name: 'Item 2.1',
        workControl: 'intermediate',
        children: [
          {
            id: 5,
            name: 'Item 2.1.1',
            workControl: 'intermediate',
            children: []
          }
        ]
      }
    ]
  },
  {
    id: 6,
    name: 'Item 3',
    workControl: 'low',
    children: [
      {
        id: 7,
        name: 'Item 3.1',
        workControl: 'high',
        children: []
      }
    ]
  }
];

// Рекурсивная функция для вывода иерархии массива
function printHierarchy(data, level = 0) {
  data.forEach(item => {
    if (item.workControl === 'intermediate') {
      console.log(' '.repeat(level * 2) + item.name);
    }
    printHierarchy(item.children, level + 1);
  });
}

// Вызов функции для вывода иерархии
printHierarchy(data);
```

Когда вы запустите этот код в вашей среде разработки или на CodePen, вы увидите, как выводится иерархия элементов с workControl равным 'intermediate' из входного массива. Вывод будет иметь иерархическую структуру, отображая уровни вложенности элементов с помощью отступов.
function getIntermediateItems(tree, result = []) {
  tree?.forEach((item) => {
    if (item.workControl?.includes('intermediate')) {
      result.push(item);
    }
    getIntermediateItems(item.content, result);
  });
  return result;
}

const intermediateItems = getIntermediateItems(myarr);
document.getElementById("dd").prepend(JSON.stringify(intermediateItems, '', 4))
Похожие вопросы