数组和对象的复制
Posted 尹丹
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数组和对象的复制相关的知识,希望对你有一定的参考价值。
1、数组的复制
a)利用数组的concat()方法
var a=[1,2,3];
var b=a.concat();
console.log(b);//[1,2,3]
a[3]=5;
console.log(a);//[1,2,3,5]
console.log(b);//[1,2,3]
b)利用数组的slice()方法
var a=[1,2,3]
var b=a.slice(0);
console.log(b);//[1,2,3]
a[3]=5;
console.log(a);//[1,2,3,5]
console.log(b);//[1,2,3]
附:arrayObject.slice(start,end)的方法说明
参数 | 描述 |
start | 必需。规定从何处开始选取。如果是负数,那么它规定从数组尾部开始算起的位置。也就是说,-1 指最后一个元素,-2 指倒数第二个元素,以此类推。 |
end | 可选。规定从何处结束选取。该参数是数组片断结束处的数组下标。如果没有指定该参数,那么切分的数组包含从 start 到数组结束的所有元素。如果这个参数是负数,那么它规定的是从数组尾部开始算起的元素。 |
返回值:返回一个新的数组,包含从 start 到 end (不包括该元素)的 arrayObject 中的元素。不会改变原数组。
c)利用jquery中的map方法
var a=[1,2,3]
var b=$.map(a,function(n){return n})
console.log(b);//[1,2,3]
a[3]=5;
console.log(a);//[1,2,3,5]
console.log(b);//[1,2,3]
d)如果数组的元素中存在对象,那么需要深度复制
//第二层为对象
var a=[{one:1,two:2},{three:3}]
var b=$map(a,function(obj){
return $.extend(true,{},obj);//对象需要深度复制
})
//第二层为数组(需要以后补充)
2、对象的复制
a)利用jquery,对象的浅度复制(只复制顶层)
var obj={a:1,b:2,c:3} var obj_q=$.extend({},obj); console.log(obj_q);//{a:1,b:2,c:3} obj.a=45; console.log(obj);//{a:1,b:2,c:3} console.log(obj_q);//{a:45,b:2,c:3}
b)利用jquery,对象的前度复制
若仍然用浅度复制,结果如下:
//第二层为对象
var obj={a:1,b:{e:45},c:3} var obj_q=$.extend({},obj); console.log(obj_q);//{a:1,b:{e:50},c:3} 没错,此时obj_q.b.e已经变成了50
obj.a=2; obj.b.e=50; console.log(obj);//{a:2,b:{e:50},c:3} console.log(obj_q);//{a:1,b:{e:50},c:3}
//第二层为数组
var obj={a:1,b:[1,2,3],c:8}
var obj_q=$.extend({},obj);
console.log(obj_q);//{a:1,b:[12,2,3],c:8}
obj.a=2
obj.b[0]=12;
console.log(obj);//{a:2,b:[12,2,3],c:8}
console.log(obj_q);//{a:1,b:[12,2,3]}
深度复制如下:
//第二层为对象
var obj={a:1,b:{e:45},c:3} var obj_q=$.extend(ture,{},obj);//第一个参数为true,不要忘了 console.log(obj_q);//{a:1,b:{e:45},c:3} 没错,此时obj_q.b.e已经变成了50 obj.a=2; obj.b.e=50; console.log(obj);//{a:2,b:{e:50},c:3} console.log(obj_q);//{a:1,b:{e:45},c:3}
//第二层为数组
var obj={a:1,b:[1,2,3],c:8}
var obj_q=$.extend(true,{},obj);
console.log(obj_q);//{a:1,b:[1,2,3],c:8}
obj.a=2
obj.b[0]=12;
console.log(obj);//{a:2,b:[12,2,3],c:8}
console.log(obj_q);//{a:1,b:[1,2,3]}
以上是关于数组和对象的复制的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”