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 相关文章推荐
在Javascript中定义对象类别
Dec 22 Javascript
jQuery 验证插件 Web前端设计模式(asp.net)
Oct 17 Javascript
window.open不被拦截的实现代码
Aug 22 Javascript
JS画5角星方法介绍
Sep 17 Javascript
表单验证正则表达式实例代码详解
Nov 09 Javascript
jQuery实现文本框邮箱输入自动补全效果
Nov 17 Javascript
Jquery中巧用Ajax的beforeSend方法
Jan 20 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
Feb 03 Javascript
解决iview多表头动态更改列元素发生的错误的方法
Nov 02 Javascript
基于JavaScript实现单例模式
Oct 30 Javascript
原生js实现贪食蛇小游戏的思路详解
Nov 26 Javascript
viewer.js实现图片预览功能
Jun 24 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支持页面回退的两种方法[转]
2007/02/14 PHP
php设计模式 FlyWeight (享元模式)
2011/06/26 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
2013/10/16 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
捕获和分析JavaScript Error的方法
2014/03/25 Javascript
node.js中的path.isAbsolute方法使用说明
2014/12/08 Javascript
基于javascript实现全国省市二级联动下拉选择菜单
2016/01/28 Javascript
基于jquery二维码生成插件qrcode
2017/01/07 Javascript
vue bootstrap小例子一枚
2017/06/09 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
原生JS实现Ajax跨域请求flask响应内容
2017/10/24 Javascript
vue引入ueditor及node后台配置详解
2018/01/03 Javascript
使用Vue开发动态刷新Echarts组件的教程详解
2018/03/22 Javascript
Node.js Buffer用法解读
2018/05/18 Javascript
使用pm2自动化部署node项目的方法步骤
2019/01/28 Javascript
vue.js实现只能输入数字的输入框
2019/10/19 Javascript
详解一些适用于Node.js的命名约定
2019/12/08 Javascript
在vue项目中引用Antv G2,以饼图为例讲解
2020/10/28 Javascript
关于小程序优化的一些建议(小结)
2020/12/10 Javascript
python交互式图形编程实例(三)
2017/11/17 Python
Numpy之文件存取的示例代码
2018/08/03 Python
详解如何获取localStorage最大存储大小的方法
2020/05/21 HTML / CSS
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
自我鉴定范文200字
2013/10/02 职场文书
愚人节活动策划方案
2014/03/11 职场文书
闭幕式主持词
2014/04/02 职场文书
完整版商业计划书
2014/09/15 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
公路施工安全责任书
2015/05/08 职场文书
寒假致家长的一封信
2015/10/10 职场文书
初中生物教学反思
2016/02/20 职场文书
SpringBoot集成Redis,并自定义对象序列化操作
2021/06/22 Java/Android