在用到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])’这一句判断.

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

演示2:
将上述extendDeep用上去,两个对象完美合并

最新文章

  1. Oracle 分页
  2. webform LinQ
  3. ASP.NET easyUI--datagrid 通过ajax请求ASP.NET后台数据的分页查询
  4. UI学习笔记---第九天UITableView表视图
  5. PHP框架_Smarty_实现登录功能
  6. 1B. Spreadsheets
  7. Win7下不能查看xp系统共享的文件,解决方法
  8. 深入浅出ThreadLocal
  9. NoSQL注入的分析和缓解
  10. vi的常用命令
  11. ASP.NET 页面双向静态化
  12. Mybatis源码之SimpleExecutor
  13. LODOP打印用JS获取的当前日期
  14. IntelliJ IDE 基础经验备案
  15. DOM对象,控制HTML元素
  16. python之pygal:掷两个不同的骰子并统计大小出现次数
  17. window配置右键菜单
  18. ansible-playbook如何判断并中断执行
  19. requires the FLAG_ACTIVITY_NEW_TASK flag
  20. MySQL MHA环境搭建

热门文章

  1. 基于jQuery实现汉字转换成拼音代码
  2. docker探索-镜像使用(四)
  3. 【微信小程序】数据与界面UI不同步,不能直接操作Page.data
  4. WK2124 驱动移植
  5. VMware下的Centos7联网并设置固定IP
  6. Java编程的逻辑 (39) - 剖析LinkedList
  7. hbase 学习(十二)非mapreduce生成Hfile,然后导入hbase当中
  8. Thymeleaf select 数据回显 选中
  9. 如何在ROS中使用PCL(2)
  10. Linux 下用管道执行 ps aux | grep 进程ID 来获取CPU与内存占用率