const addCollapsedFlag=(data, level = 1, maxLevel = 3)=>{ for (let i = 0; i < data.length; i++) { const item = data[i]; // 如果当前层级大于最大层级,给当前项添加 collapsed 标识 if (level > maxLevel) { console.log(222); item.collapsed = true; } else if (item.children) { console.log(3333); // 如果当前项有 children,继续递归遍历 children addCollapsedFlag(item.children, level + 1, maxLevel); } } } taskUnitService.statisticsSearchList(searchKeys) .then((resp) => { if (resp.length > 0) { let args = {} as any; args["name"] = item?.goodsName args["children"] = resp args["stairStatus"] = 3 addCollapsedFlag(args) console.log(args,"44444444444"); setDeviceData([args]) } else { setDeviceData(resp) } }) .finally(() => setIsLoading(false) );为什么没有打印2222 3333
时间: 2024-02-10 21:19:16 浏览: 24
根据你提供的代码,函数 `addCollapsedFlag` 中的 `console.log(222)` 和 `console.log(3333)` 只有在特定条件下才会被执行,即当前层级大于最大层级时会打印 `222`,当前项有 children 时会打印 `3333`。因此,如果这两个语句没有被执行,有可能是因为条件不满足。
在你提供的代码中,调用 `addCollapsedFlag` 的语句是 `addCollapsedFlag(args)`,该语句只传入了一个参数 `args`,没有传入第二个参数 `level` 和第三个参数 `maxLevel`,这两个参数都有默认值,分别为 1 和 3。因此,在调用 `addCollapsedFlag` 时,实际上是使用了默认值,如果你想要打印出 `222` 或 `3333`,需要根据你自己的情况传入合适的参数。
另外,你提供的代码中有一处语法错误,即 `args = {} as any;` 应该写成 `let args = {} as any;`,因为 `args` 是一个变量,需要使用 `let` 或 `const` 声明。
相关问题
优化 这段代码 for (let i = 0; i < DataSet.menuConfig.tre
eViewData.length; i++) {
const tree = DataSet.menuConfig.treeViewData[i];
if (tree.children) {
for (let j = 0; j < tree.children.length; j++) {
const child = tree.children[j];
if (child.id === id) {
return child;
}
}
}
}
在优化这段代码之前,我需要知道 DataSet.menuConfig.treeViewData 的数据结构。如果这个数据结构是一个树形结构,并且每个节点的子节点都有 id 属性,那么可以使用深度优先搜索(DFS)算法,遍历整个树,找到满足条件的节点。
具体实现可以使用递归函数,其返回值为满足条件的节点。代码如下:
function findNodeById(node, id) {
if (node.id === id) {
return node;
}
if (node.children) {
for (let i = 0; i < node.children.length; i++) {
const child = node.children[i];
const result = findNodeById(child, id);
if (result) {
return result;
}
}
}
return null;
}
使用该优化后的代码可以替换原有的代码。调用方法如下:
const node = findNodeById(DataSet.menuConfig.treeViewData, id);
if (node) {
return node;
} else {
// 找不到节点的处理逻辑
}
该优化后的代码可以减少时间复杂度,提高查找效率。
const data = res.data.data; const xunhuan = { value: [] }; for (let i = 1; i <= 4; i++) { xunhuan.value[i] = data.filter(val => val.bftype === i.toString()); }将这段代码进行优化
这段代码可以进行优化,可以使用数组的 reduce 方法来实现:
const data = res.data.data;
const xunhuan = data.reduce((acc, val) => {
acc.value[val.bftype] = acc.value[val.bftype] || [];
acc.value[val.bftype].push(val);
return acc;
}, { value: [] });
这样可以避免使用循环和 filter 方法,提高代码的效率和可读性。