博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
angular.extend深拷贝(deep copy)
阅读量:6993 次
发布时间:2019-06-27

本文共 960 字,大约阅读时间需要 3 分钟。

在用到angular.extend的时候,正好碰到一个对象,是层层嵌套的Array, 结果发现只能extend第一层,查阅官文档,确实不支持deep copy: Note: Keep in mind that angular.extend does not support recursive merge (deep copy).

在stackoverflow找到一个,只是好像没什么用,看了一下他的写法,原来是在自行判断是否应该进入下一层递归,因为深拷贝的原始需求就是拷贝到最底层的每一个字段,同时angular本身就有判断是否对象和数组的扩展方法,于是改成如下:

var extendDeep = function(dst) {  angular.forEach(arguments, function(obj) {    if (obj !== dst) {      angular.forEach(obj, function(value, key) {        if(angular.isObject(dst[key]) || angular.isArray(dst[key])){          extendDeep(dst[key], value);        } else {          dst[key] = angular.copy(value);        }           });       }  });  return dst;};

当然,你还可以更加丰富我的’angular.isObject(dst[key]) || angular.isArray(dst[key])’这一句判断.

:

做了一个对象,含有a,b,c三个字段,其中C里面又包含了几个字段,并且还有一个数组;
同时再做一个用来extend的对象,其中的C字段只有上一个对象的部分内容
测试结果自己见演示, 可见,不管C多复杂,原生的angular.extend都只是直接把整个C元素替换掉了原始的C原素,根本没有进到哪怕第一层去.

:

将上述extendDeep用上去,两个对象完美合并

转载于:https://www.cnblogs.com/walkerwang/p/4076975.html

你可能感兴趣的文章
Python的__init__, __new__魔法方法以及在__metaclass__元类中的使用
查看>>
nodejs 搞定 阿里云短信API 后面有适用于小白的解决方案
查看>>
7.11 批量创建房间
查看>>
android camera
查看>>
bzoj 2259 [Oibh]新型计算机 ——最短路(建图)
查看>>
洛谷2575高手过招
查看>>
自己动手实现线性映射,哈希映射
查看>>
依然莫名其妙的内容查询Web部件(Content Query Web Part)
查看>>
删除专家账号,要注意删干净
查看>>
抗投诉空间
查看>>
python代码 构建验证码
查看>>
Linux动态库和静态库
查看>>
js基础--高阶函数(map,reduce,filter,sort)
查看>>
结合数据结构来看看Java的String类
查看>>
全排列——DFS实现
查看>>
go 语言与循环
查看>>
iOS版 hello,world版本2
查看>>
重构遗留代码(1):金牌大师
查看>>
go:数组
查看>>
网站重构的理解
查看>>