数组和对象的复制

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=2obj.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=2obj.b[0]=12;console.log(obj);//{a:2,b:[12,2,3],c:8}console.log(obj_q);//{a:1,b:[1,2,3]}
 
时间: 2024-10-01 05:11:25

数组和对象的复制的相关文章

js 数组和对象的复制

js数组复制可以利用数组的合并方法concat()会返回一个新数组的特征 来实现复制 例如 var a=[1,2,3]; var b= a.concat(); 利用 slice()也可以, 返回的也是一个新数组. 对象的深度复制可以采用自定义回调函数实现 function clone(myObj){ if(typeof(myObj) != 'object') return myObj; if(myObj == null) return myObj; var myNewObj = new Obje

javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法

javascript 数组以及对象的深拷贝(复制数组或复制对象)的方法 前言 在js中,数组和对象的复制假设使用=号来进行复制.那仅仅是浅拷贝. 例如以下图演示: 如上.arr的改动,会影响arr2的值,这显然在绝大多数情况下,并非我们所须要的结果. 因此,数组以及对象的深拷贝就是javascript的一个基本功了. 数组的深拷贝 条条大道通罗马,实现数组的深拷贝.是有好几种方法的.举比例如以下: for 循环实现数组的深拷贝 for循环是很好用的.假设不知道高级方法.通过for循环可以完毕我们

jQuery中json对象的复制(数组及对象)

摘自: http://www.2cto.com/kf/201306/218838.html 1.jQuery自带的$.map方式: $.map(json, function (n) { return n; }); 这种方式原来用于复制数组还可以,今天用它复制数组中的某一条记录,发现字段名称丢失了,后来发现了第二种方法. 2.深复制与浅复制 // 浅层复制(只复制顶层的非 object 元素) var newObject = jQuery.extend({}, oldObject); // 深层复

java数组对象的复制

一.首先,区分数组间的赋值 1 import java.util.Arrays; 2 public class Array { 3 public static void main(String[] args) 4 { 5 int[] array = new int[]{0, 1, 2, 3}; 6 int[] arr = array; //书组赋值 7 System.out.println(Arrays.toString(array)); //输出array 8 System.out.print

对象的复制与赋值操作

C++中动态分配对象的内存有着很微妙的地方,下面就来简单说一下: 结论:如果在类中动态分配了内存,那么就应该编写自己的复制构造函数以及赋值运算符,来提供深层次的内存复制. 动态分配对象内存的好处:有时候在程序运行之前,我们无法知道具体需要多少内存空间,比如编写一个类时,不知道类的某个对象需要占多少内存,这个时候我们就需要动态分配对象内存空间了.动态分配内存使我们能够在想要一块内存的时候就去分配一块我们想要的大小的内存空间. 动态分配对象内存需要注意的地方: 1. 释放内存:我们要在不需要动态分配

Java对象的复制

Java中对象的赋值分为浅拷贝和深拷贝. 1.对象浅拷贝 1 public class CloneTest{ 2 static class Emp{ 3 String name; 4 int age; 5 Date hireDate; 6 } 7 public static void main(String[] args){ 8 Emp emp1=new Emp(); 9 Emp emp2=emp1; 10 } 11 } 这种用“=”赋值的情况下就是对象的浅拷贝.在内存中emp1和emp2都指向

JNI/NDK开发指南(五)——访问数组(基本类型数组与对象数组)

转载请注明出处:http://blog.csdn.net/xyang81/article/details/42346165 JNI中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,基本类型数组中的所有元素都是JNI的基本数据类型,可以直接访问.而对象数组中的所有元素是一个类的实例或其它数组的引用,和字符串操作一样,不能直接访问Java传递给JNI层的数组,必须选择合适的JNI函数来访问和设置Java层的数组对象.阅读此文假设你已经了解了JNI与Java数据类型的映射关系,如果还不了解

数组与对象基本操作(JQuery)

首先呢,你要理解什么是数组什么是对象. 数组(array):是一种有序的值的集合. 对象(object):是一种无序的属性集合,每个属性都有自己的名字和值. $符号是JQuery符 1 jQuery.each(object, [callback]) 遍历数组或对象 2 参数: 3 object:需要例遍的对象 或数组. 4 callback:每个成员/元素执行的回调函数. 5 遍历数组: 6 $.each(["q", "w", "e", &quo

js 对象深复制,创建对象和继承

js 对象深复制,创建对象和继承.主要参考高级编程第三版,总结网上部分资料和自己的代码测试心得.每走一小步,就做一个小结. 1.对象/数组深复制 一般的=号传递的都是对象/数组的引用,如在控制台输入 var a=[1,2,3], b=a; b[0]=0; a[0] 此时显示的结果为0,也就是说a和b指向的是同一个数组,只是名字不一样罢了. 单层深复制: 1.js的slice函数: 返回一个新的数组,包含下标从 start 到 end (不包括该元素,此参数可选)的元素. 控制台输入: var a