js数组及对象的深拷贝
2014-01-24 11:19
274 查看
为了解除引用关系复制对象或者数组,如果是浅层的数组或对象(也就是数组中不包含对象或数组),可以通过slice或者concat方法直接实现。
也可以通过自己的方法实现,就是遍历数组或对象,返回新数组或者对象。
那么如何实现拷贝包含对象或者数组的这种情况呢?那么就通过递归拷贝来实现。
注意:代码中我用instanceof来判断类型,一定要把o instanceof Array 放在 o instanceof Object上面,因为如果是数组的话,instanceof Object也返回true。
如此即可。
var arr1 = [1, 2, 3]; var arr2 = arr1.slice(0); arr1[0] = 0; console.log(arr1); console.log(arr2);
var arr3 = [1, 2, 3]; var arr4 = arr3.concat(); arr3[0] = 0; console.log(arr3); console.log(arr4);
也可以通过自己的方法实现,就是遍历数组或对象,返回新数组或者对象。
var simpleCopy = function(o){ if (o instanceof Array) { var n = []; for (var i = 0; i < o.length; ++i) { n[i] = o[i]; } return n; } else if (o instanceof Object) { var n = {} for (var i in o) { n[i] = o[i]; } return n; } }
那么如何实现拷贝包含对象或者数组的这种情况呢?那么就通过递归拷贝来实现。
var deepCopy = function(o) { if (o instanceof Array) { var n = []; for (var i = 0; i < o.length; ++i) { n[i] = deepCopy(o[i]); } return n; } else if (o instanceof Object) { var n = {} for (var i in o) { n[i] = deepCopy(o[i]); } return n; } else { return o; } }
注意:代码中我用instanceof来判断类型,一定要把o instanceof Array 放在 o instanceof Object上面,因为如果是数组的话,instanceof Object也返回true。
如此即可。
相关文章推荐
- js数组、对象深拷贝
- JS数组和对象的浅拷贝和深拷贝
- 分享2个功能的js代码(去掉数组里重复的项、数组或对象深拷贝)
- js实现数组和对象的深浅拷贝
- js 数组对象的深浅拷贝
- JS中深拷贝数组、对象、对象数组方法总结
- JS中实现数组和对象的深拷贝和浅拷贝
- js实现数组和对象的深浅拷贝
- js中实现数组与对象的深拷贝
- js 数组的深浅拷贝 js对象的深浅拷贝
- js数组及对象的深拷贝
- js 数组和对象的深度拷贝
- JS数组和对象的深拷贝
- js 对象和数组的深拷贝
- 高效的去掉js数组或者字符串中重复的对象方法
- js声明数组、对象在jsp页面中(获得ajax得到json数据)
- 利用JS对象的特性去除数组中的重复项
- JS 函数与作用域 引用类型对象拷贝
- JS对象的深浅拷贝
- js对象深拷贝