JavaScript数组复制详解


Posted in Javascript onFebruary 02, 2017

前面的话

  前面的博文中介绍了对象拷贝,本文将详细介绍数组复制

push

function copyArray(arr){
  var result = [];
  for(var i = 0; i < arr.length; i++){
    result.push(arr[i]);
  }
  return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3]
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3,4]

join
  使用该方法的缺点是数组中的项全部变成了字符串形式

function copyArray(arr){
  var result = [];
  result = arr.join().split(',');
  return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //['1','2','3']
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //['1','2','3',4]

concat

function copyArray(arr){
  var result = [];
  result = arr.concat();
  return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3]
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3,4]

slice

function copyArray(arr){
  var result = [];
  result = arr.slice();
  return result;
}

var obj1=[1,2,3];
var obj2=copyArray(obj1);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3]
obj2.push(4);
console.log(obj1); //[1,2,3]
console.log(obj2); //[1,2,3,4]

深拷贝

  以上方法实现的仅是数组的浅拷贝,如果要实现数组的深拷贝,需要使用递归方法

function copyArray(arr,result){
  var result = result || [];
  for(var i = 0; i < arr.length; i++){
    if(arr[i] instanceof Array){
      result[i] = [];
      copyArray(arr[i],result[i]);
    }else{
      result[i] = arr[i];
    }      
  }
  return result;
}

var obj1=[1,2,[3,4]];
var obj2=copyArray(obj1);
console.log(obj1[2]); //[3,4]
console.log(obj2[2]); //[3,4]
obj2[2].push(5);
console.log(obj1[2]); //[3,4]
console.log(obj2[2]); //[3,4,5]
Javascript 相关文章推荐
jQuery 学习第七课 扩展jQuery的功能 插件开发
May 17 Javascript
LazyLoad 延迟加载(按需加载)
May 31 Javascript
基于Jquery的淡入淡出的特效基础练习
Dec 13 Javascript
Jquery多选下拉列表插件jquery multiselect功能介绍及使用
May 24 Javascript
jquery indexOf使用方法
Aug 19 Javascript
判断JS对象是否拥有某属性的方法推荐
May 12 Javascript
jquery事件与绑定事件
Mar 16 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
Apr 03 jQuery
socket.io学习教程之基本应用(二)
Apr 29 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
Jun 22 Javascript
jQuery实现朋友圈查看图片
Sep 11 jQuery
JavaScript中遍历的十种方法总结
Dec 15 Javascript
常用jQuery选择器汇总
Feb 02 #Javascript
JavaScript优化以及前段开发小技巧
Feb 02 #Javascript
JavaScript字符集编码与解码详谈
Feb 02 #Javascript
JS实现购物车特效
Feb 02 #Javascript
jQuery实现复选框的全选和反选
Feb 02 #Javascript
jQuery制作图片旋转效果
Feb 02 #Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
Feb 02 #Javascript
You might like
计算php页面运行时间的函数介绍
2013/07/01 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
2013/11/26 PHP
ecshop 2.72如何修改后台访问地址
2015/03/03 PHP
Laravel 5框架学习之表单验证
2015/04/08 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
2017/09/16 PHP
PHP钩子实现方法解析
2019/05/21 PHP
方便实用的jQuery checkbox复选框全选功能简单实例
2013/10/09 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
深入浅析Vue中的 computed 和 watch
2018/06/06 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
jQuery实现高级检索功能
2019/05/28 jQuery
JS Math对象与Math方法实例小结
2019/07/05 Javascript
[46:38]完美世界DOTA2联赛PWL S2 Magma vs PXG 第三场 11.28
2020/12/02 DOTA
Python实现Const详解
2015/01/27 Python
python实现的文件同步服务器实例
2015/06/02 Python
用Python解决计数原理问题的方法
2016/08/04 Python
全面了解python中的类,对象,方法,属性
2016/09/11 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python中logging日志记录到文件及自动分割的操作代码
2020/08/05 Python
几款好用的python工具库(小结)
2020/10/20 Python
美国时尚在线:Showpo
2017/09/08 全球购物
JAKO-O德国野酷台湾站:德国首屈一指的婴幼童用品品牌
2019/01/14 全球购物
星空联盟C# .net笔试题
2014/12/05 面试题
邓小平理论心得体会
2014/09/09 职场文书
2014年宣传部个人工作总结
2014/12/06 职场文书
敬业奉献模范事迹材料(2016精选版)
2016/02/26 职场文书
TensorFlow中tf.batch_matmul()的用法
2021/06/02 Python
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技