我 treeDataMap 的数据结构是这样的:
SL-971510:
Array(1)
0: children: Array(1)0: children: []
title: {$$typeof: Symbol(react.element), type: 'span', key: null, ref: null, props: {…}, …}
value: "SL-864264"
SL-971510:
Array(1)
0: children: Array(1)0: children: []
title: {$$typeof: Symbol(react.element), type: 'span', key: null, ref: null, props: {…}, …}
value: "SL-864264"
const [treeDataMap, setTreeDataMap] = useState({}); // 添加 treeDataMap 状态
treeDataMap 不是空的 这个只是定义的方式
const getTreeDataForListIInter = (id) => {
debugger
// 查找与 ID 相关联的节点
const nodeToUpdate = findNodeById(treeDataMap, id);
// 如果找到了节点,则更新其值
if (nodeToUpdate) {
const { value } = nodeToUpdate;
console.log("子节点值:",value)
return value;
}
// 返回结果
if (treeDataMap[id]) {
return treeDataMap[id];
}
return [];
};
我要取到 SL-864264 这 value
const findNodeById = (node, id) => {
if (node.value === id) {
return node;
} else if (node.children) {
console.log("...");
}else{
for (let i = 0; i < node.length; i++) {
console.log(".node属性..:",node);
debugger
if (node.children[i].value === id) {
debugger
return node.children[i];
} else {
const foundNode = findNodeById(node.children[i], id); //
if (foundNode) {
return foundNode;
}
}
}
}
return null;
};
根据你提供的数据结构,treeDataMap 是一个对象,其中每个属性代表一个节点,它的值是一个数组。如果要获取 SL-864264 这个节点的 value 值,你可以按照以下方式进行操作:
首先需要获取到 SL-971510 这个节点,因为它是 SL-864264 的父节点。可以通过 findNodeById 函数查找:
const parentNode = findNodeById(treeDataMap, "SL-971510");
如果找到了 SL-971510 节点,则可以从它的 children 属性中查找子节点 SL-864264:
if (parentNode) {
const childNode = parentNode.children.find((node) => node.value === "SL-864264");
if (childNode) {
const childValue = childNode.value;
console.log("子节点值:", childValue);
}
}
这段代码会在控制台输出 “子节点值:SL-864264”。
不知道你这个问题是否已经解决, 如果还没有解决的话:首先,根据您提供的数据结构,我们可以看到treeDataMap对象有一个名为0的属性,它包含子属性children。children属性包含一个长度为1的数组,其中有一个元素0,它也包含一个名为children的空数组。简单来说,您需要从对象的第一层开始遍历,然后检查它的属性。
以下是一些可能有用的建议和prompt:
确保您使用的React版本是18.2,以充分利用新功能和优化。
确认您的treeDataMap对象确实存在,并且数据结构与您提供的相同。
如果treeDataMap对象中的子节点可能存在多个层级,请考虑使用递归来遍历每个子节点,并从中获取所需的数据。以下是一个递归函数的示例代码,它可以从treeDataMap对象中获取所有叶子节点的数据:
function getAllLeafData(treeData) {
// 如果当前节点没有children属性,则这是一个叶子节点,返回它的数据
if (!treeData.children || treeData.children.length === 0) {
return treeData.data; // 假设数据存在于叶子节点的data属性中
}
// 如果有children属性,则递归遍历每个子节点,并将它们的数据存储在一个数组中
const childData = [];
treeData.children.forEach((child) => {
childData.push(getAllLeafData(child));
});
// 将子节点的数据合并到一个数组中并返回
return [].concat(...childData);
}
const childrenData = treeDataMap[0].children.map((child) => {
return child.data; // 假设每个子节点都有一个data属性
});