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 10:35:18 浏览: 39
PyQt(Python+Qt)学习随笔:QTreeWidgetItem项下的子项列表中增加子项的方法
在这段代码中,变量 `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` 重新赋值为 `[]`,或者使用另一个变量来保存计算结果,以免修改原始数组。
阅读全文