关于深拷贝(含数组对象)

1、普通的深拷贝(对象中不含数组的话,可以使用该方法)

var complex = {persons:[‘one‘,‘two‘],age:‘20,20,20‘,arr:[1,4,2]};
console.log(deepCopyObj(complex));

如果含有数组的话,会将数组转为下面这种形式,{0:‘one’,1:‘two‘}

function deepCopyObj(obj){
    var newcopy = {};
    if(typeof obj ==‘object‘) {
        for(var key in obj){ console.log(key,obj[key]);
            newcopy[key] = typeof obj[key] ==‘object‘ ? deepCopyObj(obj[key]) : obj[key];
        }
    }
    return newcopy;
}

针对json形式的对象那个,满足两个条件:1、键名是数值 2、添加一个length属性,可以转换成数组

//json对象转为数组 满足两个条件:1、键名是数值 2、添加一个length属性
var arr = [10,20,30];
var copyobj = deepCopyObj(arr);
console.log(‘copyobj‘,copyobj);  //{0:10,1:20,2:30}
copyobj.length = 3;        //添加length属性
var copeArr = [].slice.call(copyobj,0); //转数组
console.log(‘copeArr‘,copeArr); // [10,20,30]

2、改进的方法

function deepCopyAdvanced(obj){
    if(obj instanceof Array){
        var copy = [];
        for(var i=0,len=obj.length;i<len;i++){
            copy[i] = typeof obj[i] ==‘object‘ ? deepCopyAdvanced(obj[i]) : obj[i];
        }
        return copy;
    }else if(obj instanceof Object){
        var copy = {};
        for(var key in obj){
            copy[key] = typeof obj[key] ==‘object‘ ? deepCopyAdvanced(obj[key]) : obj[key];
        }
        return copy;
    }

    return obj;
}
时间: 2024-10-09 04:18:19

关于深拷贝(含数组对象)的相关文章

JavaScript之String、Date、Number、Math、数组对象day0912

String对象: 创建对象的方式: 一:var str=new  String("字符串内容"); 二:var str="字符串内容"; String对象常用的方法: anchor()   生产锚点     blink()     为元素添加blink标签      charAt()     返回指定索引位置处的字符.     charCodeAt() 回一个整数,代表指定位置上字符的 Unicode 编码.     fontcolor()  把带有 COLOR

JS的数据类型判断函数、数组对象结构处理、日期转换函数,浏览器类型判断函数合集

工具地址:https://github.com/BothEyes1993/bes-jstools bes-jstools 100多个基础常用JS函数和各种数据转换处理集合大全,此工具包是在 outils 的基础上,加上个人平时收集的代码片段进行的二次整合 Browser Support 7+ ? Latest ? Latest ? Latest ? Latest ? 6.1+ ? Installing npm install bes-jstools --save Using nodejs con

js中的节点遍历+类数组对象

firstChild  第一个子元素 lastChild  最后一个子元素 childNodes[n]  =   childNodes.item(n)    第n+1个子元素 parentNode  父元素 nextSibling  下一个兄弟元素 previousSibling  上一个兄弟元素 document.documentElement 获取文档的根节点 .tagName 标签名 <!DOCTYPE html> <html lang="en"> <

js中的数组对象排序

一.普通数组排序 js中用方法sort()为数组排序.sort()方法有一个可选参数,是用来确定元素顺序的函数.如果这个参数被省略,那么数组中的元素将按照ASCII字符顺序进行排序.如: var arr = ["a", "b", "A", "B"]; arr.sort(); console.log(arr);//["A", "B", "a", "b"

js中的数组/对象(阮一峰的js基础教程)

//打印出键值1 Object.keys(array1) 2 ["0", "1", "2", "3", "4", "5"] Object.keys方法返回数组的所有键名.js规定:对象的键名一律为字符串,所以,数组的键名其实也是字符串.之所以可以用数值读取,是因为非字符串的键名会被转为字符串. arr.0的写法不合法,因为单独的数值不能作为标识符(identifier).所以,数组成员只

Foundation框架的基本对象之数组对象

在程序设计中数组的使用非常频繁,Foundation框架提供了NS数组类型,NS数组类型包括可修改的和不可修改两种,只能用来存放相关的对象类型,OC为我们提供了相关的基本的数组操作,并对相关的数组操作进行了封装. 数组的定义 我们可以简单的把数组看做是把同一类型的数据有序的进行排列,进行同一存储,即同种类型数据的集合. 数组的声明 数组声明和变量声明类似 格式:数组类型  数组名[数组大小]例如 :int score[5]; 数据类型  数组名[长度]=[数值1,数值2,……,数值n]. 例如:

JavaScript数组对象的声明与使用

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <title>数组对象的声明与使用</title> </head> <body> <script typ

JQuery $.each遍历JavaScript数组对象实例

查看一个简单的jQuery的例子来遍历一个JavaScript数组对象. var json = [ {"id":"1","tagName":"apple"}, {"id":"2","tagName":"orange"}, {"id":"3","tagName":"banana&q

spring mvc 控制器方法传数组对象的一些经验

因为项目需要在一个表单里面提交多个对象,比较好的做法就是直接在控制器方法参数里传一个数组. 由于Spring mvc框架在反射生成控制方法的参数对象的时候会调用这个类的getDeclaredConstructor方法来获得构造函数, 但是一直报NoSuchMethodException的异常. 根据这个方法的jdk文档,这个类是一个数组对象时,这个方法会抛出java.lang.NoSuchMethodException,因为接口.数组类.void.基本类型没有构造函数. 同事后来给我支了两招,使