要查询并返回id
为222的对象数据中parentId
为7对应的对象的父节点数据,我们需要遍历整个data
数组,找到id
为222的对象,并从其父节点中提取信息。由于您提供的data
数组中的对象格式存在问题(例如,对象的键值对应该用花括号{}
包围),我将先帮您修正格式,然后提供查询的代码。
修正后的data
数组格式如下:
const data = [{"id": 1,"name": "常用指标","parentId": 0,"signalTypeIds": "","harmonicTimes": "","children": [{"id": 7,"name": "相电压","parentId": 1,"signalTypeIds": {"0": 1,"1": 94,"2": 161,"3": 228,"4": 295},"harmonicTimes": "","children": [{"children": undefined,"harmonicTimes": "","id": 222,"label": "A相","name": "A相","parentId": 7,"signalTypeIds": { "0": 1, "1": 94, "2": 161, "3": 228, "4": 295 },"value": "A相"}]}]},{"id": 3,"name": "电压电流功率","parentId": 0,"signalTypeIds": "","harmonicTimes": "","children": [{"id": 4,"name": "相电压","parentId": 3,"signalTypeIds": {"0": 1,"1": 94,"2": 161,"3": 228,"4": 295},"harmonicTimes": "","children": []}]}
];
现在,我们可以使用以下递归函数来查询并返回id
为222的对象的父节点数据:
function findParentNodeById(id, data) {for (const item of data) {if (item.children) {for (const child of item.children) {if (child.children) {// 递归搜索孙节点const result = findParentNodeById(id, child.children);if (result) return result; // 如果在孙节点中找到,返回结果} else if (child.id === id) {// 找到id为222的对象,返回其父节点return child;}}}}return null; // 如果没有找到,返回null
}const parentNode = findParentNodeById(222, data);console.log(parentNode); // 这将输出id为222的对象的父节点数据
这段代码定义了一个findParentNodeById
函数,它接受两个参数:要搜索的id
和要搜索的数组。函数内部,它遍历提供的数组及其所有子数组,查找id
为指定值的对象。当找到id
为222的对象时,它返回该对象的父节点数据。如果没有找到匹配的对象,函数返回null
。