我在这里遇到问题: 例如,树数据:
[{ key: 1, value: 1, children: [{ key: 11, value: 11: children: [] }] }, { key: 2, value: 2, children: [] } ]
现在我想要这个:
[{key:1,value:1},{key:11,value:11},{key:2,value:2}]
如何使用rxjs或其他方式处理该问题?将不胜感激。
答案 0 :(得分:0)
创建一个递归函数并遍历数组。循环时,检查当前键值是否为数组。如果它是一个数组,则使用新数据再次调用重新存储函数
let data = [{
key: 1,
value: 1,
children: [{
key: 11,
value: 11,
children: []
}]
},
{
key: 2,
value: 2,
children: []
}
]
let finalArray = [];
function formatData(data) {
data.forEach((item) => {
let obj = {};
for (let keys in item) {
if (Array.isArray(item[keys])) {
formatData(item[keys])
} else {
obj[keys] = item[keys];
}
}
finalArray.push(obj)
})
}
formatData(data);
console.log(finalArray)
答案 1 :(得分:0)
您可以使用类似的方法对树进行深度优先的递归遍历。假设您的输入数据是一致的。
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)