js方法,修改树类型数据,如果是叶子节点 isLeaf 赋值为true,否则赋值为false
时间: 2024-11-17 08:30:00 浏览: 18
在JavaScript中,可以创建一个辅助函数来遍历树,并在访问每个节点时检查是否为叶子节点(即没有子节点)。我们可以使用`Array.prototype.every()`配合递归来完成这个任务。以下是实现的一个示例:
```javascript
function makeLeavesTrue(tree) {
return Array.isArray(tree) ? tree.map(makeLeavesTrue).every(Boolean) : Boolean(tree.isLeaf); // 只有当是数组且所有元素都是真(非空)时才返回true
}
function traverseAndMarkLeaves(tree) {
function processNode(node) {
node.isLeaf = !Array.isArray(node.children) || node.children.length === 0; // 判断是否为叶子节点
if (Array.isArray(node.children)) {
node.children.forEach(processNode); // 递归处理子节点
}
}
processNode(tree);
return tree;
}
// 示例树
const exampleTree = {
value: 'root',
children: [
{ value: 'child1', children: [] }, // 叶子节点
{ value: 'child2' }, // 叶子节点
{ value: 'child3', children: [{ value: 'subchild1' }, { value: 'subchild2' }]} // 非叶子节点
]
};
// 更新叶子节点标志
exampleTree = traverseAndMarkLeaves(exampleTree);
console.log(exampleTree); // 打印更新后的树,叶子节点的isLeaf属性应该为true
阅读全文