var a = [1,2,3,4];
var b = a;
b[1] = 8;
console.log("a:" + a );//1,8,3,4
consloe.log("b:" + b);//1,8,3,4

上面的这种直接赋值的方式其实就是浅拷贝,但是上面打印的并我们想要得到的结果,其实我们想要的是a的值不变。所以这就需要用其他方式来解决

关于JS 的深拷贝:

数组深拷贝:

(1),slice

var a = [1,2,3,4];
var b = a.slice(0);
b[1] = 8;
console.log("a:" + a );//1,2,3,4
consloe.log("b:" + b);//1,8,3,4

(2),concat

var a = [1,2,3,4];
var b = a.concat();//连接一个空的
b[1] = 8;
console.log("a:" + a );//1,2,3,4
consloe.log("b:" + b);//1,8,3,4

对象深拷贝:

对象的深拷贝,就只能遍历整个对象,赋值给新的对象

var deep_copy= function(obj) { //对象深拷贝
var new_obj={};
for (var key in obj) {
new_obj[key] = typeof obj[key]===’object’? deep_copy(obj[key]): obj[key];//递归赋值
}
return new_obj;
}

关于AngularJs 的浅拷贝:

<div ng-app>
<div ng-controller="demoCtrl">
{{sample}}
</div>
</div>
function demoCtrl($scope){
var DeepCopy = function(data) {
angular.forEach(arguments, function(obj) {//遍历arguments-->即data
if (obj !== data) {
angular.forEach(obj, function(value, key) {
if(angular.isObject(data[key]) || angular.isArray(data[key])){
DeepCopy(data[key], value);
} else {
data[key] = angular.copy(value);
}
});
}
});
return data;
}; $scope.a = {
"one":11,"two":[
{
"name":"小明",
"age":13,
"items":[
{
"a":1,
"b":1,
"c":2
}
]
},
{
"age":24,
"items":[
{
"a":10,
"c":10
}
]
}
]
};
var b = {
"one":33, "two":[
{
"age":63,
"items":[
{
"a":88,
"b":88
}
]},
{
"age":14,
"items":[
{
"a":70,
"b":70
}
]
}
]
};
DeepCopy($scope.a,b);
}

结果:

{"one":33,"two":[{"name":"小明","age":63,"items":[{"a":88,"b":88,"c":2}]},{"age":14,"items":[{"a":70,"c":10,"b":70}]}]}

这样的对象深拷贝才满足要求,完美复制!

深拷贝/浅拷贝之Js / AngularJs的更多相关文章

  1. JS Object Deep Copy & 深拷贝 & 浅拷贝

    JS Object Deep Copy & 深拷贝 & 浅拷贝 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Refe ...

  2. c# 内存的具体表现- 通用类型系统 深拷贝 浅拷贝 函数传参

    c# 通用类型系统 及变量在 深拷贝 浅拷贝 函数传参 中的深层次的表现 在编程中遇到了一些想不到的异常,跟踪发现,自己对于c#变量在内存上的表现理解有偏差,系统的学习并通过代码实验梳理了各种情况下, ...

  3. python集合增删改查,深拷贝浅拷贝

    集合 集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型),但是集合本身是不可哈希(所以集合做不了字典的键)的.以下是集合最重要的两点: 去重,把一个列表变成集合,就自动去重了. 关系 ...

  4. JavaScript之深拷贝&浅拷贝

    深拷贝&浅拷贝,说起来都明白,但是说不出所以然.今天就系统的整理下思绪,一点点的将其分析出所以然 废话不多说 浅拷贝 简单的说就是一个值引用,学生时代接触过编程的人都应该了解过指针,浅拷贝可以 ...

  5. 【opencv】imread 赋值 深拷贝浅拷贝

    import cv2 import copy import os def filter_srcimg(dstimg): ss=3 srcimg=copy.deepcopy(dstimg) #aa=5 ...

  6. Java基础 深拷贝浅拷贝

    Java基础 深拷贝浅拷贝 非基本数据类型 需要new新空间 class Student implements Cloneable{ private int id; private String na ...

  7. 【04】Python 深拷贝浅拷贝 函数 递归 集合

    1 深拷贝浅拷贝 1.1 a==b与a is b的区别 a == b    比较两个对象的内容是否相等(可以是不同内存空间) a is b  比较a与b是否指向同一个内存地址,也就是a与b的id是否相 ...

  8. 一篇文章彻底说清JS的深拷贝/浅拷贝

    一篇文章彻底说清JS的深拷贝and浅拷贝 这篇文章的受众 第一类,业务需要,急需知道如何深拷贝JS对象的开发者. 第二类,希望扎实JS基础,将来好去面试官前秀操作的好学者. 写给第一类读者 你只需要一 ...

  9. Map拷贝 关于对象深拷贝 浅拷贝的问题

    问题:map拷贝时发现数据会变化. 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后      先看例子:     ...

随机推荐

  1. 安居客Android项目架构演进

    入职安居客三年从工程师到Team Leader,见证了Android团队一路走来的发展历程.因此有心将这些记录下来与大家分享,也算是对自己三年来一部分工作的总结.希望对大家有所帮助,更希望能得到大家宝 ...

  2. OSS最新进度汇报(2.25)

    OSS系列最新进度情况如下:一. OSS.Social进度 1. 客服接口升级至新客服接口 2. BaseRecMsg中RecMsg字符串类型修改为xml类型 3. 添加Redis缓存注册实现,代码见 ...

  3. MongoDB分布式

    结构: ShardServer1:27020 ShardServer2:27021 ShardServer3:27022 ShardServer4:27023 ConfigServer:27100 R ...

  4. 隐马尔可夫模型(HMM)攻略

    隐马尔可夫模型 (Hidden Markov Model,HMM) 最初由 L. E. Baum 和其它一些学者发表在一系列的统计学论文中,随后在语言识别,自然语言处理以及生物信息等领域体现了很大的价 ...

  5. html中DTD

    DTD 是一套关于标记符的语法规则.它是XML1.0版规格得一部分,是html文件的验证机制,属于html文件组成的一部分. DTD:三种文档类型:Strict(严格的).Transitional(过 ...

  6. js原生Ajax 的封装和原理

    原理及概念 AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术. 动态网页:是指可以通过服务器语言结合数 ...

  7. C++ protected访问权限思考

    看了云风关于protected的思考,自己也总结了下. C++的访问权限有三个 private.protected.public. 如果不包括继承的话,比较好理解,可以分为类外和类内两部分.类外不能访 ...

  8. 小白该怎么学《马哥Linux从入门到精通》

    首先,必须说明我已经不是小白啦~现在的我在国内某独角兽担任运维工程师,带着一个四人小团队,在运维方面也算是有些心得,勉强过来回答一下这个问题,就算抛砖引玉了. 所有人都是从小白阶段过来的,我=也经历过 ...

  9. 2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛

    2060: [Usaco2010 Nov]Visiting Cows 拜访奶牛 Time Limit: 3 Sec  Memory Limit: 64 MBSubmit: 252  Solved: 1 ...

  10. 挂接命令(mount) 【转】

    收藏些文章,以后可能有用,文章出自:http://tutu.spaces.eepw.com.cn/articles/article/item/70737 挂接命令(mount) 首先,介绍一下挂接(m ...