原创

解决数组push覆盖问题


代码: var obj = { a: 123, b: 234, c: 345};

var array = [ ];

var resultObj = { };

for(var i = 0; i < obj.length; i++) {

  resultObj.name = obj[i];

  array.push(resultObj);

}

得到的结果: 345, 345, 345; 而不是123, 234, 345;

原因: 把对象定义在外面, 始终指向一个地址, 每次赋值都赋值给了同一个地址, 所以最后赋值的会覆盖之前的值;

JS深拷贝解决办法:JS深拷贝

如: var obj = { a: 123, b: 234, c: 345};

    var array = [ ];
    
    var resultObj = { };
    
    for(var i = 0; i < obj.length; i++) {
    
      resultObj.name = JSON.parse(JSON.stringify(obj[i]));
    
      array.push(resultObj);
    
    }

结果是123, 234, 345; 这是最简单的深拷贝bug也多,不清楚的可以看这篇: js深拷贝

前端基础
  • 作者:渣渣前端(联系作者)
  • 发表时间:2020-08-04 16:02
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号二维码
  • 评论