美文网首页
记一次数组问题push后改变所有值-深拷贝

记一次数组问题push后改变所有值-深拷贝

作者: 青乌 | 来源:发表于2020-12-17 16:31 被阅读0次
问题描述

updateData函数外定义数组arr,处理后数组仍指向原来地址,当第二次执行push方法时不能按照顺序添加新数据,而是所有数据都发生改变。

var arrList=[],
    newArr=[];
var arr=[{'name':'张三'},{'name':'李四'},{'name':'王五'}];
function updateData(arr,index){
    arr.splice(index,1)
    return arr;
}
newArr=updateData(arr,1);
arrList.push(newArr)
newArr=updateData(arr,0);
arrList.push(newArr)
解决办法

利用slice方法深拷贝新的数组。

function updateData(arr,index){
    var arr1=arr.slice();
    arr1.splice(index,1)
    return arr1;
}
知识点:数组深拷贝
  1. 一维数组:slice、concat、[...a]
  2. 深层数组:
function deepCopy(source){
  if (typeof source != "object") {
    return source;
  }
  if (source == null) {
   return source;
  }
  var newArr = source.constructor === Array ? [] : {};  
  for (var i in source) {
    newArr[i] = deepCopy(source[i]);
  }
  return newArr;
}

相关文章

  • 记一次数组问题push后改变所有值-深拷贝

    问题描述 在updateData函数外定义数组arr,处理后数组仍指向原来地址,当第二次执行push方法时不能按照...

  • 小问题笔记

    深拷贝,浅拷贝 此问题针对于引用类型浅拷贝,拷贝(地址)完后,改变任意对象的值后,均改变深拷贝,拷贝完后,与前对象...

  • Java 浅拷贝和深拷贝

    java中传递为值传递,对于引用类型,改变值后,原对象及引用对象值将都改变,最近刚好看java中浅拷贝和深拷贝问题...

  • 放进收藏夹,省下时间睡觉!

    1. 数组去重 2. 深浅拷贝 浅拷贝 深拷贝 假深拷贝 真深拷贝 3. 事件委托 5. 使用push和apply...

  • Javascript深拷贝

    什么是深拷贝 创建一个新的对象或数组时,将原对象/数组的“值”拷贝,而不是“引用”。 深拷贝 数组拷贝不存在多层嵌...

  • iOS 深度理解浅拷贝与深拷贝

    在工作中如果不能正确理解浅拷贝与深拷贝就会造成不想改变的值被改变了,出现了再次使用数组时没有数据,显示的值不是我们...

  • 前端模糊搜索实现与深拷贝cloneDeep

    对获取到的原始数组数据进行深拷贝,以免改变原始数组结构;通过输入值匹配数组对象值来重组匹配出来的数组。 1.安装l...

  • 关于几个拷贝的问题

    数组浅拷贝 数组深拷贝 复合数组深拷贝

  • 深拷贝与浅拷贝

    深拷贝和浅拷贝的区别 当A复制B的值时,B改变了,A也跟着变,这就是浅拷贝;如果改变B的值,A不改变,那么就是深拷...

  • JavaScript之深拷贝与浅拷贝

    深拷贝和浅拷贝 深拷贝:改变拷贝后的结果,不会影响拷贝之前的内容 浅拷贝:改变拷贝后的结果,会影响拷贝之前的内容 ...

网友评论

      本文标题:记一次数组问题push后改变所有值-深拷贝

      本文链接:https://www.haomeiwen.com/subject/mmpzgktx.html