[{serv? true name 'Карточка 1' children [{serve true name 'Карточка 1.1' } {serve true name 'Карточка 1.2' children [{serve true name 'Карточка 1.2.1' } {serve true name 'Карточка 1.2.2' }]}]}
{serv? false name 'Карточка 2' children [{serve true name 'Карточка 2.1' } ]}]
[{id 1 serv? true name 'Карточка 1'}
{id 1.1 serve true name 'Карточка 1.1' }
{id 1.2 serve true name 'Карточка 1.2'}
{id 1.2.1 serve true name 'Карточка 1.2.1' }
{id 1.2.2 serve true name 'Карточка 1.2.2' }
{id 2 serv? false name 'Карточка 2'}
{id 2.1 serve true name 'Карточка 2.1' }]
function treeToPlainList(tree, idPrefix = '') {
let list = [];
// Проходит по каждому элементу массива
tree.forEach((item, index) => {
// Добавляет к элементу свойство id
const itemForPlainList = {...item, id: idPrefix + (index + 1)};
// Удаляет из элемента свойство children
delete itemForPlainList.children;
// Добавляет элемент в итоговый массив
list.push(itemForPlainList);
if (item.children) {
// Добавляет в конец итогового массива элементы, которые возвращает функция treeToPlainList
list = [...list, ...treeToPlainList(item.children, idPrefix + (index + 1) + '.')];
}
});
return list;
}
const list = treeToPlainList(tree); // tree — изначальный массив, list — результат
const getList = (data) => {
let res = [];
const toList = ({serve, name, children}, index, prefix = '') => {
const id = prefix ? prefix + '.' + (index + 1) : (index + 1);
res.push({id: id, serve: serve, name: name});
children && children.length > 0 && children.forEach((v, k) => toList(v, k, id));
}
data.forEach((item, key) => {toList(item, key)});
return res;
}