广告发布许可证seo下载站
数组的初始值保存问题
问题描述:
添加收件人列表页与发消息页面导航条处于同步更新状态,绑定的同一个数组
需求:用户选择后点击了取消的话,取消用户本次操作选中的收件人。
逻辑:当用户点击图标打开添加联系人页面,保存数据初始值
addmen(){this.fristAddressee = this.addresseethis.sendMan = truethis.getMan() //获取联系人列表},selectPersion(item){ // 添加联系人选中实现// console.log(item, idx)const res = this.addressee.findIndex(self=>self.id == item.id && self.nickname == item.nickname )// console.log(res)if(res != -1){console.log('已存在')}else{this.addressee.push(item)}},cancelSelectSendMan(){ // 取消添加联系人事件this.sendMan = falsethis.addressee = this.fristAddressee},
结果发现fristAddressee 与addressee同样在同步更新,导致初始值并没有保存成功
原因分析猜想:堆地址问题
this.addressee 和 this.fristAddressee 保存的相同的地址,所以push进数组,两个地址中数组都发生了变化
解决:通过递归解析解决 或者 json处理
//json处理
addmen(){this.fristAddressee = JSON.parse(JSON.stringify(this.addressee))this.sendMan = truethis.getMan()},
//深复制-递归处理deepCopy(o,c){var c = c || []for(let i in o){if(typeof o[i] === 'object'){//要考虑深复制问题了if(Array.isArray(o[i])){//这是数组console.log(1)c[i] =[]}else{//这是对象c[i] = {}}this.deepCopy(o[i],c[i]) // 递归}else{c[i] = o[i]}}return c},addmen(){ // 打开联系人列表保存数据this.fristAddressee = this.deepCopy(this.addressee,this.fristAddressee)this.sendMan = truethis.getMan()},cancelSelectSendMan(){ // 取消选中联系人事件 置空this.sendMan = falsethis.addressee = this.fristAddresseethis.fristAddressee = null},