for (let item of list) { let addchildren=[] if(item.orgDepartment.length>0){ let org_id = item.orgDepartment.map(e=>e.org_id) addchildren = this.orgList.filter(e=>org_id.includes(e.value)) for(let ite of item.orgDepartment){ let adds={ children:[], text:ite.title, value:ite.id, opened: false, selected: false, disabled: false, loading: false, } addchildren.find(e =>e.value === ite.org_id)?.children.push(adds); } console.log(addchildren) } let add={ children:addchildren, text:item.title, value:item.id, opened: false, selected: false, disabled: false, loading: false, } data.find(e =>e.value === item.pid)?.children.push(add); }为什么addchildren叠加了
时间: 2024-03-31 16:35:18 浏览: 37
在这段代码中,变量 `addchildren` 在外层 `for` 循环开始时被初始化为 `[]`,然后在内层 `if` 条件成立时被赋值为 `this.orgList.filter(e=>org_id.includes(e.value))`,即 `this.orgList` 中 `value` 属性在 `org_id` 数组中出现的元素。接着在内层 `for` 循环中,对 `addchildren` 数组中的某些元素进行了修改,即将一个新的对象 `adds` 添加到了 `addchildren` 数组中的某些元素的 `children` 属性中。
因为在 JavaScript 中,对象是引用类型,所以当你修改了 `addchildren` 数组中某个元素的属性时,也就是在修改该元素指向的对象的属性,所以 `addchildren` 数组中的元素也跟着被修改了。而在下一次外层循环中,又会将 `addchildren` 赋值为一个新的数组,所以之前的修改就被覆盖了,看起来就像 `addchildren` 叠加了。
如果你想要避免这个问题,可以在内层循环结束后手动将 `addchildren` 重新赋值为 `[]`,或者使用另一个变量来保存计算结果,以免修改原始数组。
相关问题
for (let item of list) { let addchildren=[] if(item.orgDepartment.length>0){ let org_id = item.orgDepartment.map(e=>e.org_id) addchildren = this.orgList.filter(e=>org_id.includes(e.value)) for(let ite of item.orgDepartment){ let adds={ children:[], text:ite.title, value:ite.id, opened: false, selected: false, disabled: false, loading: false, } addchildren.find(e =>e.value === ite.org_id)?.children.push(adds); } console.log(addchildren) } let add={ children:addchildren, text:item.title, value:item.id, opened: false, selected: false, disabled: false, loading: false, } data.find(e =>e.value === item.pid)?.children.push(add); }为什么addchildren叠加了,帮我修改一下代码
为了避免 `addchildren` 叠加的问题,你可以在外层循环的每次迭代中,手动将 `addchildren` 数组重置为空数组。修改后的代码如下:
```javascript
for (let item of list) {
let addchildren = [];
if (item.orgDepartment.length > 0) {
let org_id = item.orgDepartment.map(e => e.org_id);
addchildren = this.orgList.filter(e => org_id.includes(e.value));
for (let ite of item.orgDepartment) {
let adds = {
children: [],
text: ite.title,
value: ite.id,
opened: false,
selected: false,
disabled: false,
loading: false,
};
addchildren.find(e => e.value === ite.org_id)?.children.push(adds);
}
console.log(addchildren);
}
let add = {
children: addchildren,
text: item.title,
value: item.id,
opened: false,
selected: false,
disabled: false,
loading: false,
};
data.find(e => e.value === item.pid)?.children.push(add);
addchildren = []; // 重置 addchildren 数组为空数组
}
```
这样修改后,每次迭代都会使用一个全新的空数组来存储 `addchildren`,从而避免了叠加的问题。
QLIST<QTreeWidgetItem*>
`QList<QTreeWidgetItem*>` 是一个 Qt 框架中的容器类,用于存储 `QTreeWidgetItem*` 类型的指针。
下面是一个简单的示例,演示如何使用 `QList<QTreeWidgetItem*>` 创建和操作对象:
```cpp
#include <QTreeWidget>
#include <QTreeWidgetItem>
#include <QList>
int main() {
// 创建一个 QTreeWidget 对象
QTreeWidget treeWidget;
// 创建根节点
QTreeWidgetItem* rootItem = new QTreeWidgetItem(&treeWidget);
rootItem->setText(0, "Root");
// 创建 QList<QTreeWidgetItem*> 对象
QList<QTreeWidgetItem*> itemList;
// 创建子节点并添加到 QList 中
for (int i = 0; i < 3; i++) {
QTreeWidgetItem* item = new QTreeWidgetItem(rootItem);
item->setText(0, "Item " + QString::number(i+1));
itemList.append(item);
}
// 将 QList<QTreeWidgetItem*> 中的元素添加到根节点
rootItem->addChildren(itemList);
// 显示树形控件
treeWidget.show();
return 0;
}
```
在上述示例中,我们创建了一个 `QList<QTreeWidgetItem*>` 对象,然后使用循环创建了三个子节点,并将它们添加到 `QList` 中。最后,使用 `addChildren` 方法将 `QList<QTreeWidgetItem*>` 中的元素添加到根节点。
请注意,这只是一个示例,你可以根据实际需求进行调整和扩展。
阅读全文