事情是这样的:原一个购物车 合并本地数据和服务器 数据方法如下 ,正常测试没有问题,当每次重新登录,会调用到这个方法,就会莫名其妙的卡主,debug 发现 a1.length =77731508 导致卡死

但是 console.log(a1) 长度是正常的。。。

  async getMergeCart(){
let a1 = await this.getLocalCart();//本地数据
let a2 = await this.getServeCart();//服务器数据
let arr=a1;//先赋值给arr a1 console.log('debug',a1);
console.log('debug',a2);
if(a1.length === 0){
return a2;//如果本地没数据 返回服务器数据。。。。
} for(let i=0;i<a1.length;i++){
for(let j=0;j<a2.length;j++){
if(a1[i].id!=a2[j].id){
arr.push(a2[j]);
}
} }
return arr;
}

=======================================问题解决=================================================

原因在于  arr.push(a2[j]);

当前arr 是 a1 的浅拷贝 就是a1的引用 ,arr修改 对应a1也会修改

循环如果出现 有id不相同情况 会导致 a1.length 增长导致 无限循环-

上面写法就是错误的。。。。脑子抽了

正确写法:

  async getMergeCart(){
//合并数据应当以本地数据为主!
const a1 = await this.getLocalCart();
const a2 = await this.getServeCart();
//长度先确定好..因为.length 是变长?
let len_a1 = a1.length; if(a1.length === 0){
return a2;//如果本地没数据 返回服务器数据。。。。
}
//必须使用len ---该bug当服务器数据和本地数据相同时不会触发,所以有隐蔽性。。。
for(let i=0; i<len_a1; i++){
for(let j=0;j<a2.length;j++){
if(a1[i].id==a2[j].id){
a1.splice(i,1);//移除对应key
i--;//当前key 被移除 需要对应key前移一位
len_a1--;//当前key 被移除 需要长度减一位
break;
}
}
}
for(let i=0;i<a2.length;i++){
a1.push(a2[i]);
}
return a1;
}

最新文章

  1. 搭建通过 ssh 访问的 Git 服务器
  2. iOS截屏
  3. PHP-----函数和二进制
  4. Map/Reduce 工作机制分析 --- 作业的执行流程
  5. (旧)子数涵数&#183;VB——变量
  6. IBatis.net动态SQL语句(六)
  7. HDU 1520Anniversary party(树型DP)
  8. WPF的DataGrid绑定ItemsSource后第一次加载数据有个别列移位的解决办法
  9. http://www.cnblogs.com/eye-like/p/4121219.html
  10. mac osx App store 安装软件 发生错误
  11. Linq的简单查询
  12. Chain of Responsibility
  13. Servlet(一)
  14. Linux永久挂载远程网络目录
  15. JAVASCRIPT实现XML分页
  16. 【转】 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
  17. windows server 搭建radius服务器
  18. C# winform初学者实例
  19. Spring学习(12)--- @Autowired与@Resource 对比
  20. 浅谈Linux文件与目录权限

热门文章

  1. 1029C语言文法的理解
  2. spring mvc $.ajax没有指定contentType ,导致后台无法接收到数据
  3. react-router之代码分离
  4. Spring Cloud Zuul(服务网关)
  5. 循环 与 next()
  6. BZOJ3712 PA2014Fiolki(kruskal重构树)
  7. 抽屉点赞及jQuery CSS操作
  8. 【bzoj4520】K远点对
  9. 【生成树,堆】【CF1095F】 Make It Connected
  10. 【cdq分治】【CF1093E】 Intersection of Permutations