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

2020-12-17  本文已影响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;
}
上一篇 下一篇

猜你喜欢

热点阅读