写一个递归树形转平铺函数
时间: 2023-05-16 21:06:01 浏览: 158
好的,以下是递归树形转平铺的函数:
```python
def flatten_tree(tree):
if not tree:
return []
if isinstance(tree, list):
return [item for sublist in tree for item in flatten_tree(sublist)]
return [tree]
```
这个函数可以将一个嵌套的树形结构转换为一个扁平的列表。
相关问题
写一个递归树形转平铺js函数
当然可以,以下是一个递归树形转平铺的 JavaScript 函数:
function flattenTree(tree) {
let result = [];
function traverse(node) {
result.push(node);
if (node.children) {
node.children.forEach(child => traverse(child));
}
}
traverse(tree);
return result;
}
这个函数接收一个树形结构的对象作为参数,返回一个扁平化的数组。函数通过递归遍历树形结构,将每个节点都添加到结果数组中,最终返回结果数组。
lodash树形结构平铺
`lodash`是一个流行的JavaScript实用工具库,它提供了一系列便捷的方法处理数组、对象等数据结构。当你需要将树形结构(通常是通过对象嵌套表示的数据)转换成扁平化的数据结构时,可以使用`_.flattenDeep`或`_.mapValues`函数。
`_.flattenDeep(obj)`方法会递归地展开嵌套的对象,将所有层级的属性都展平到一个新的一维数组中。例如:
```javascript
var nestedObj = {
name: 'John',
children: [
{ age: 10 },
{ name: 'Jane', children: [{ age: 8 }] }
]
};
var flattenedObj = _.flattenDeep(nestedObj);
// 结果可能类似于:{ 'name': 'John', 'age': 10, 'children.name': 'Jane', 'children.age': 8 }
```
而`_.mapValues(obj, callback)`可以对每个值应用一个回调函数,并返回一个新的映射对象。如果想要同时处理键和值,可以结合使用:
```javascript
var flattenedObj = _.mapValues(nestedObj, function(value) {
if (_.isObject(value)) {
return _.flattenDeep(value);
}
return value;
});
```
这将把嵌套的对象变成扁平化的新对象,键保持不变,值如果是对象则展开。
阅读全文