js数组复制和js对象复制以及深度复制
作者:佳明妈 来源:web前端开发 2016-10-05 人气:js数组或者js对象,是引用类型,不能直接使用 = 复制数据,js数组和js对象如果使用 = 复制,这时候改变一边另外一边就随之改变,js数组的复制我们可以采用如下方式实现:
js数组或者js对象,是引用类型,不能直接使用 = 复制数据,js数组和js对象如果使用 = 复制,这时候改变一边另外一边就随之改变,js数组的复制我们可以采用如下方式实现:
利用slice复制数组
arrayObject.slice(start,end)这个方法返回新数组,而省略end参数的话,将截取start到结束位置。于是就有了:数组.slice(0); 复制数组的方法,如下:
var a = [0,1,2,3,4];
var a = [0,1,2,3,4];
var aCopy = a.slice(0);
如果不是标准的数组,而是dom节点这种类数组是不能直接使用数组的slice方法,于是使用如下方法间接使用slice方法,如下:
var a = document.getElementsByTagName("a");
var copy = Array.prototype.slice.call(a,0);
利用for循环复制js数组,如下:
var a= [1,2,3]; var b = []; for(var i=0;i<a.length;i++){ b.push(a[i]) };
注意:此法只是对简单的数组有效,如果是类似 [1,2,3,{a:1},5] 这种里面有对象的还是不可以完全适用,因为里面的对象仍然是引用类型,并没有复制成功。
实现数组或者对象的深度复制deepClone
function type(obj) { var toString = Object.prototype.toString; var map = { '[object Boolean]' : 'boolean', '[object Number]' : 'number', '[object String]' : 'string', '[object Function]' : 'function', '[object Array]' : 'array', '[object Date]' : 'date', '[object RegExp]' : 'regExp', '[object Undefined]': 'undefined', '[object Null]' : 'null', '[object Object]' : 'object' };
if(obj instanceof Element) {
return 'element';
}
return map[toString.call(obj)]; } function deepClone(data) { var t = type(data), o, i, ni; if(t === 'array') { o = []; }else if( t === 'object') { o = {}; }else { return data; } if(t === 'array') { for (i = 0, ni = data.length; i < ni; i++) { o.push(deepClone(data[i])); } return o; }else if( t === 'object') { for( i in data) { o[i] = deepClone(data[i]); } return o; } } ↓ 查看全文
js数组复制和js对象复制以及深度复制由懒人建站收集整理,您可以自由传播,请主动带上本文链接
懒人建站就是免费分享,觉得有用就多来支持一下,没有能帮到您,懒人也只能表示遗憾,希望有一天能帮到您。
- 上一篇:es6模块化用法
- 下一篇:javascript忍者秘籍pdf文字版免费下载
js数组复制和js对象复制以及深度复制-最新评论