今天碰到个问题,js对象、数组深度复制;之前有见过类似的,不过没有实现函数复制,今晚想了一下,实现代码如下:

function clone(obj) {
var a;
if(obj instanceof Array){
a=[];
for(var i=0;i<obj.length;i++){
a.push(clone(obj[i]))
}
}else if(obj instanceof Function){
return eval('('+obj.toString()+')')
}else if(obj instanceof Object){
a={};
for(var i in obj){
a[i]=clone(obj[i])
}
}else {
return obj;
}
return a;
}

特意实验了下发现效果还不错:

var obj= {
'name':['tom','lizi'],
'age':{
'xiaoming':{
'nihao':'en'
},
'en':undefined,
'h':function s() {
var ggg={
'hell':'e'
}
console.log(ggg)
}
}
}
console.log(clone(obj));//!==obj
function xx() {
var obj= {
'name':['tom','lizi'],
'age':{
'xiaoming':{
'nihao':'en'
},
'en':undefined,
'h':function s() {
var ggg={
'hell':'e'
}
console.log(ggg)
}
}
}
return obj;
}
console.log(clone(xx)()==obj)//false

如有问题欢迎指出

js对象/数组深度复制的更多相关文章

  1. js对象数组深度去重和深度排序

    使用collect.js处理数组和对象 https://github.com/ecrmnn/collect.js/# 引入collect.js https://github.com/ecrmnn/co ...

  2. js中对象的深度复制

    // 对象的深度复制 cloneObj(oldObj) var cloneObj = function (obj) { var newObj = {}; if (obj instanceof Arra ...

  3. js对象的深度克隆

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. 前台的js对象数组传到后台处理。在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

    前台的js对象数组传到后台处理.在前台把js对象数组转化为json字符串,在后台把json字符串解析为List<>

  5. js对象数组中的某属性值 拼接成字符串

    js对象数组中的某属性值 拼接成字符串 var objs=[ {id:1,name:'张三'}, {id:2,name:'李四'}, {id:3,name:'王五'}, {id:4,name:'赵六' ...

  6. JS对象—数组总结(创建、属性、方法)

    JS对象—数组总结(创建.属性.方法) 1.创建字符串 1.1 new Array() var arr1 = new Array(); var arr2 = new Array(6); 数组的长度为6 ...

  7. js对象数组多字段排序

    来源:js对象数组按照多个字段进行排序 一.数组排序 Array.sort()方法可以传入一个函数作为参数,然后依据该函数的逻辑,进行数组的排序. 一般用法:(数组元素从小大进行排序) var a = ...

  8. js对象进行浅复制,深拷贝的方法

    js对象浅拷贝和深拷贝详解   本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷 ...

  9. 转载---Java集合对象的深度复制与普通复制

    原博文:http://blog.csdn.net/qq_29329775/article/details/49516247 最近在做算法作业时出现了错误,原因是没有弄清楚java集合的深度复制和浅度复 ...

随机推荐

  1. FTP客户端连接时中文乱码问题处理

    1.问题场景: 使用FileZilla连接FTP时发现中文字符有乱码,如题: 2. 分析问题: 主要是字符问题引起的:FileZilla是自动检测字符集的,会导致部分中文字符集显示异常: 3.解决方法 ...

  2. Xcode 运行cocos2dx弹出内部错误对话框(Internal Error)

    cocos2dx未捕获的异常升高.选择"继续"继续运行在一个不一致的状态.选择"崩溃"停止应用和崩溃报告一个错误文件. 莫名其妙,代码没有报错,运行时却弹出(内 ...

  3. Go并发控制之sync.WaitGroup

    WaitGroup 会将main goroutine阻塞直到所有的goroutine运行结束,从而达到并发控制的目的.使用方法非常简单,真心佩服创造Golang的大师们! type WaitGroup ...

  4. [转]word2vec使用指导

    word2vec是一个将单词转换成向量形式的工具.可以把对文本内容的处理简化为向量空间中的向量运算,计算出向量空间上的相似度,来表示文本语义上的相似度. 一.理论概述 (主要来源于http://lic ...

  5. RDIFramework.NET框架Web中datagrid与treegrid控件自动生成右键菜单与列标题右键菜单

    在实际应用中常可以看到数据展示控件有右键菜单的功能,对应的列标题也可以右键弹出快捷菜单设置指定列的显示与隐藏等功能.在我们的RDIFramework.NET Web框架中,只要是使用了EasyUI的D ...

  6. EF实体框架之CodeFirst一

    对于SQL Server.MySql.Oracle等这些传统的数据库,基本都是关系型数据库,都是体现实体与实体之间的联系,在以前开发时,可能先根据需求设计数据库,然后在写Model和业务逻辑,对于Mo ...

  7. 日志时间格式有s,ms,us,如何排序最大10行

    这个比较繁琐,谁有更好方法?告诉我  [root@module tmp]# cat oldboy.txt       12s120001ms12000000us13s[root@module tmp] ...

  8. HDU5870 Alice's Adventure in Wonderland

    大概做法是这样的 考虑最朴素的做法,预处理出1到所有点的最短路数组dis1和方案数数组cnt1,和预处理出n到所有点的最短路数组dis2和方案数数组出cnt2,然后暴力枚举点对(A,B),如果A和B之 ...

  9. Linux Bond的原理及其不足

    http://www.tektea.com/archives/1969.html. 在企业及电信Linux服务器环境上,网络配置都会使用Bonding技术做网口硬件层面的冗余,防止单个网口应用的单点故 ...

  10. [Struts2] Action Implements SessionAware

    struts2 的Action中若希望访问Session对象,可采用两种方式: 1.从ActionContext中获取: 2.实现SessionAware接口. 1.从ActionContext中获取 ...