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 相关文章推荐
使用 Node.js 做 Function Test实现方法
Oct 25 Javascript
javascript面向对象之对象的深入理解
Jan 13 Javascript
JavaScript中实现sprintf、printf函数
Jan 27 Javascript
javascript实现tab切换特效
Nov 12 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
Aug 05 Javascript
详解Vue-cli 创建的项目如何跨域请求
May 18 Javascript
React-Native左右联动List的示例代码
Sep 21 Javascript
JavaScript实现删除数组重复元素的5种常用高效算法总结
Jan 18 Javascript
JavaScript实现多个物体同时运动
Mar 12 Javascript
vue-autoui自匹配webapi的UI控件的实现
Mar 20 Javascript
如何利用 JS 脚本实现网页全自动秒杀抢购功能
Oct 12 Javascript
JS前端可扩展的低代码UI框架Sunmao使用详解
Jul 23 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 mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
PHP 向右侧拉菜单实现代码,测试使用中
2009/11/03 PHP
PHP中文分词的简单实现代码分享
2011/07/17 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
php post换行的方法
2020/02/03 PHP
js调用flash的效果代码
2008/04/26 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
输入密码检测大写是否锁定js实现代码
2012/12/03 Javascript
javascript之典型高阶函数应用介绍
2013/01/10 Javascript
getComputedStyle与currentStyle获取样式(style/class)
2013/03/19 Javascript
jquery实现弹出窗口效果的实例代码
2013/11/28 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
jQuery统计指定子元素数量的方法
2015/03/17 Javascript
JavaScript中setTimeout的那些事儿
2016/11/14 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
JS动态添加的div点击跳转到另一页面实现代码
2017/09/30 Javascript
JS实现键值对遍历json数组功能示例
2018/05/30 Javascript
JavaScript回调函数callback用法解析
2020/01/14 Javascript
vue prop传值类型检验方式
2020/07/30 Javascript
Python实现查找匹配项作处理后再替换回去的方法
2017/06/10 Python
深入分析python数据挖掘 Json结构分析
2018/04/21 Python
python自动发送邮件脚本
2018/06/20 Python
python 实现方阵的对角线遍历示例
2019/11/29 Python
Python线程条件变量Condition原理解析
2020/01/20 Python
tensorflow2.0保存和恢复模型3种方法
2020/02/03 Python
HTML5实现获取地理位置信息并定位功能
2015/04/25 HTML / CSS
Speedo速比涛中国官方网站:全球领先泳装运动品牌
2018/04/24 全球购物
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
土木工程专业大学毕业生求职信
2013/10/13 职场文书
初中新生军训方案
2014/05/13 职场文书
政风行风评议工作总结
2014/10/21 职场文书
2014年护理部工作总结
2014/11/14 职场文书
工会积极分子个人总结
2015/03/03 职场文书
2015年乡镇科普工作总结
2015/05/13 职场文书
MySQL选择合适的备份策略和备份工具
2022/06/01 MySQL