JS 数组和对象的深拷贝操作示例


Posted in Javascript onJune 06, 2020

本文实例讲述了JS 数组和对象的深拷贝操作。分享给大家供大家参考,具体如下:

一.数组的深拷贝

let arr = [
 undefined,
 function(){
  console.log(123); 
 },
 true,
 null,
 {
  name:"123",
  age:23
 }
];
// arr作为拷贝对象

1. Array.from()

Array.from()能将一个类数组转化成一个真正的数组,因此它返回的是一个新数组。

let arr1 = Array.from(arr);
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

2. Object.assign()

let arr1 = Object.assign([], arr)
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

此方法也可用作对象的深拷贝

3. Slice()

let arr1 = arr.slice(0);
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

4. Concat()

let arr1 = arr.concat();
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

5. 扩展运算符深拷贝

// let [...arr1] = arr; // 这两种都可以
let arr1 = [...arr];
arr[0] = 2;
console.log(arr1);
// [ undefined, [Function], true, null, { name: '123', age: 23 } ]

此方法也可用作对象的深拷贝

二.对象的深拷贝

let obj = {
 name: "a",
 age: 20,
 sex: false,
 user: {
  a: 20,
  n: "b"
 },
 f: function(){
  return 1;
 },
 u: undefined,
 n: null
}

用扩展运算符和Object.assign()方法可以深拷贝对象

let obj1 = Object.assign({}, obj)
obj[age] = 2;
console.log(obj1);
// let obj = { name: "a", age: 20, sex: false,user: {a: 20,n: "b},f: function(){return 1;},u: undefined,n: null}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
Node.js实现批量去除BOM文件头
Dec 20 Javascript
jQuery中:header选择器用法实例
Dec 29 Javascript
JavaScript获取页面中表单(form)数量的方法
Apr 03 Javascript
IE10中flexigrid无法显示数据的解决方法
Jul 26 Javascript
jQuery带进度条全屏图片轮播特效代码分享
Jun 28 Javascript
node.js抓取并分析网页内容有无特殊内容的js文件
Nov 17 Javascript
jQuery实现点击按钮文字变成input框点击保存变成文字
May 09 Javascript
AngularJS实现DOM元素的显示与隐藏功能
Nov 22 Javascript
vue.js移动端app实战1:初始配置详解
Jul 24 Javascript
如何封装了一个vue移动端下拉加载下一页数据的组件
Jan 06 Javascript
Vue程序化的事件监听器(实例方案详解)
Jan 07 Javascript
vue-resource post数据时碰到Django csrf问题的解决
Mar 13 Javascript
ES6 Generator基本使用方法示例
Jun 06 #Javascript
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 #jQuery
ES6 Symbol在对象中的作用实例分析
Jun 06 #Javascript
微信小程序多列表渲染数据开关互不影响的实现
Jun 05 #Javascript
浅谈element中InfiniteScroll按需引入的一点注意事项
Jun 05 #Javascript
使用JavaScript实现网页秒表功能(含开始、暂停、继续、重置功能)
Jun 05 #Javascript
Node.js API详解之 dgram模块用法实例分析
Jun 05 #Javascript
You might like
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
IE中jscript/javascript的条件编译
2006/09/07 Javascript
Js中sort()方法的用法
2006/11/04 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
javascript弹出层输入框(示例代码)
2013/12/11 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
2014/05/21 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
100多个基础常用JS函数和语法集合大全
2017/02/16 Javascript
利用10行js代码实现上下滚动公告效果
2017/12/08 Javascript
vue写一个组件
2018/04/09 Javascript
在 Vue 项目中引入 tinymce 富文本编辑器的完整代码
2018/05/04 Javascript
vue自定义指令的创建和使用方法实例分析
2018/12/04 Javascript
React 实现拖拽功能的示例代码
2019/01/06 Javascript
微信小程序组件传值图示过程详解
2019/07/31 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
React+EggJs实现断点续传的示例代码
2020/07/07 Javascript
uni-app 自定义底部导航栏的实现
2020/12/11 Javascript
详解Python函数作用域的LEGB顺序
2016/05/14 Python
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
python实现给scatter设置颜色渐变条colorbar的方法
2018/12/13 Python
python如何实现代码检查
2019/06/28 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
必须要使用游标的SQL语句有那些
2012/05/07 面试题
婚假请假条格式及范文
2014/04/10 职场文书
会计求职信范文
2014/05/24 职场文书
基层党员四风问题自我剖析材料
2014/09/29 职场文书
副检察长四风问题对照检查材料思想汇报
2014/10/07 职场文书
领导干部作风整顿个人剖析材料
2014/10/11 职场文书
大学生自荐书范文
2015/03/05 职场文书
保研推荐信范文
2015/03/25 职场文书
2015年组织部工作总结
2015/04/03 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python