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 相关文章推荐
jquery toolbar与网页浮动工具条具体实现代码
Jan 12 Javascript
深入理解JavaScript系列(26):设计模式之构造函数模式详解
Mar 03 Javascript
jquery事件的ready()方法使用详解
Nov 11 Javascript
Bootstrap Paginator分页插件使用方法详解
May 30 Javascript
详解jQuery插件开发方式
Nov 22 Javascript
Vue.js 2.0 移动端拍照压缩图片预览及上传实例
Apr 27 Javascript
JavaScript限定范围拖拽及自定义滚动条应用(3)
May 17 Javascript
AngularJs实现聊天列表实时刷新功能
Jun 15 Javascript
JavaScript简介_动力节点Java学院整理
Jun 26 Javascript
node中实现删除目录的几种方法
Jun 24 Javascript
小程序实现横向滑动日历效果
Oct 21 Javascript
vue tab切换,解决echartst图表宽度只有100px的问题
Jul 19 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的控制语句
2006/10/09 PHP
PHP变量的定义、可变变量、变量引用、销毁方法
2013/12/20 PHP
php检测文件编码的方法示例
2014/04/25 PHP
PHP实现将HTML5中Canvas图像保存到服务器的方法
2014/11/28 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
25个非常棒的jQuery滑块插件和教程小结
2011/09/02 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
Jquery:ajax实现翻页无刷新功能代码
2013/08/05 Javascript
js监听鼠标事件控制textarea输入字符串的个数
2014/09/29 Javascript
使用Bootstrap Tabs选项卡Ajax加载数据实现
2016/12/23 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
浅谈ElementUI中switch回调函数change的参数问题
2018/08/24 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
微信小程序API—获取定位的详解
2019/04/30 Javascript
vue-quill-editor的使用及个性化定制操作
2020/08/04 Javascript
[38:44]DOTA2上海特级锦标赛A组小组赛#2 Secret VS CDEC第二局
2016/02/25 DOTA
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
linux下python抓屏实现方法
2015/05/22 Python
Python基本语法经典教程
2016/03/11 Python
Python Django 简单分页的实现代码解析
2019/08/21 Python
通过字符串导入 Python 模块的方法详解
2019/10/27 Python
浅谈python已知元素,获取元素索引(numpy,pandas)
2019/11/26 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
使用python tkinter开发一个爬取B站直播弹幕工具的实现代码
2021/02/07 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
银行职员自我鉴定
2014/04/20 职场文书
小学生作文评语大全
2014/04/21 职场文书
团日活动总结模板
2014/06/25 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
学生吸烟检讨书
2014/09/14 职场文书
Android中的Launch Mode详情
2022/06/05 Java/Android