js 修改树形结构中父级和子级的名字
时间: 2024-02-18 09:02:34 浏览: 21
可以通过递归遍历树形结构,找到每个节点并修改其名称和其子节点的名称。下面是一个示例代码:
```javascript
function renameTree(node, parentName) {
node.name = parentName + ' - ' + node.name;
if (node.children) {
node.children.forEach((child) => {
renameTree(child, node.name + ' - ' + child.name);
});
}
}
```
这个函数接受两个参数,第一个是要修改的节点,第二个是父节点的名称。它将当前节点的名称修改为新的父名称和原名称的组合。然后,如果当前节点有子节点,它将递归调用自身,将当前节点的名称和子节点的名称作为新的父名称,并处理每个子节点。
例如,如果有一个名为`tree`的树形结构,它包含一个根节点和多个子节点,可以像这样调用函数:
```javascript
renameTree(tree.root, 'Tree');
```
这将修改每个节点的名称为`Tree - node name`,并递归处理每个子节点的名称,格式为`Tree - parent node name - child node name`。
相关问题
js 树形结构数据过滤 保留父级和子集
你可以使用递归来过滤树形结构的数据,保留父级和子集。以下是一个示例代码:
```javascript
function filterTreeData(data, parentId) {
const filteredData = [];
for (let i = 0; i < data.length; i++) {
const node = data[i];
// 如果节点的父级ID与指定的父级ID匹配,则保留该节点及其子集
if (node.parentId === parentId) {
const newNode = { ...node };
// 递归过滤子集
newNode.children = filterTreeData(data, node.id);
filteredData.push(newNode);
}
}
return filteredData;
}
```
你可以将你的树形结构数据作为参数传递给 `filterTreeData` 函数,并指定要保留的父级ID。函数将返回一个过滤后的树形结构数据,其中包含指定父级及其子集。
请注意,上述代码是一个简单示例,前提是你的树形结构数据具有 `id` 和 `parentId` 字段来表示节点之间的关系。你可能需要根据你的实际数据结构进行适当的修改。
树形数据,如果父级全选返回父级的名称和id,如果子级勾选返回名称为:父级-子级,JS实现
可以使用递归的方式来处理树形数据,以下是一个实现的示例代码:
```javascript
function getSelectedNodes(nodes, parentName = '', parentId = '') {
let result = [];
nodes.forEach(node => {
if (node.checked) {
if (node.children && node.children.length > 0) {
// 子节点勾选,递归调用
let subNodes = getSelectedNodes(node.children, node.name, node.id);
result.push(...subNodes);
} else {
// 叶子节点勾选,返回父级名称和id
let name = parentName ? `${parentName}-${node.name}` : node.name;
let id = parentId ? `${parentId}-${node.id}` : node.id;
result.push({ name, id });
}
} else if (node.children && node.children.length > 0) {
// 父级节点未勾选,但有子节点勾选,递归调用
let subNodes = getSelectedNodes(node.children, node.name, node.id);
result.push(...subNodes);
}
});
return result;
}
```
其中 nodes 是树形数据的数组,每个节点包含 id、name、checked 和 children 属性。如果节点为叶子节点,children 属性为 undefined 或空数组。
调用示例:
```javascript
let nodes = [
{
id: '1',
name: 'Parent A',
checked: false,
children: [
{ id: '11', name: 'Child A-1', checked: true },
{ id: '12', name: 'Child A-2', checked: true },
{ id: '13', name: 'Child A-3', checked: false }
]
},
{
id: '2',
name: 'Parent B',
checked: true,
children: [
{ id: '21', name: 'Child B-1', checked: true },
{ id: '22', name: 'Child B-2', checked: true }
]
}
];
let selectedNodes = getSelectedNodes(nodes);
console.log(selectedNodes);
// Output: [{ name: 'Parent A-Child A-1', id: '1-11' }, { name: 'Parent A-Child A-2', id: '1-12' }, { name: 'Parent B-Child B-1', id: '2-21' }, { name: 'Parent B-Child B-2', id: '2-22' }]
```