javascript 数组的深度复制

一般情况下,使用 “=” 可以实现赋值。但对于数组、对象、函数等这些引用类型的数据,这个符号就不好使了。

1. 数组的简单复制

1.1 简单遍历

最简单也最基础的方式,自然是循环处理。示例:

1.2 变通的复制实现

经常出现在面试题中的取巧方法,是使用 slice 或 contcat 方法实现。示例:

2. 数组的深度复制

普通的一维数组且值为非引用类型,使用上述方法是没有问题的,否则就比较麻烦了。深度复制需要考虑数组值为各种引用类型的情况。

2.1 使用 JSON 方法

JSON.stringify(array) 然后再 JSON.parse()。示例:

此方法存在对古老浏览器的兼容性问题。如确需要作兼容,可引入如下兼容文件解决:

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

注意:如果数组值为函数,上述方法还是不行的。

2.2 深度复制的完全实现

考虑到多维数组的嵌套,以及数组值为对象的情况,可以作如下原型扩展(当然写为普通函数实现也是可以的,原型扩展是不建议的方式):

2.3 使用 jQuery 的 extend 方法

如果你在使用 jQuery,那么最简单的方法是使用 extend 插件方法。示例:


 

2 3 收藏 3 评论

关于作者:任侠

事在人为 个人主页 · 我的文章 · 2

可能感兴趣的话题



直接登录
最新评论
  • 第一个例子中的 array_copy 函数 最后return 个a? 函数内部第一句,就是直接定义out=[ ] ,本身out就是空数组, out[i] instanceof array 永远都是false …永远都是return arr 下面的循环体就用不到  那这函数写的意义是什么 这不就是把arr2=arr1 ? 如果说错请指点…

    • 任侠 web 前端开发工程师 02/09

      你说的是对的

      文中是变量写错了 arr 写为了 out[i](可能是编辑时从下面复制的),已经改过来

  • xxs asc   11/27

    你在原型加的方法, 数组是多个JSON嵌套根本不是深度拷贝

跳到底部
返回顶部