Вы можете сделать рекурсивный обход дерева в глубину с помощью чего-то вроде.Это делает предположения, что ваши входные данные согласованы.
let arr = [{key: 1,value: 1,children: [{key: 11,value: 11,children: []}]},{key: 2,value: 2,children: []}]
function flatTree(arr){
return arr.reduce((res, {key, value, children} ) =>
res.concat({key, value}, ...flatTree(children))
, [])
}
console.log(flatTree(arr))
Вы также можете сделать это в одном вложенном reduce()
:
let arr = [{key: 1,value: 1,children: [{key: 11,value: 11,children: []}]},{key: 2,value: 2,children: []}]
let r = arr.reduce(function flatTree(res, {key, value, children} ) {
return res.concat({key, value}, ...children.reduce(flatTree, []))
}, [])
console.log(r)