问题描述
在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;
}
知识点:数组深拷贝
- 一维数组:slice、concat、[...a]
- 深层数组:
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;
}
网友评论