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 相关文章推荐
slice函数的用法 之不错的应用
Dec 29 Javascript
JS限制上传图片大小不使用控件在本地实现
Dec 19 Javascript
HTML5之lang属性与dir属性的详解
Jun 19 Javascript
jquery如何获取复选框的值
Dec 12 Javascript
js实现选中复选框文字变色的方法
Aug 14 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
Bootstrap模态框(Modal)实现过渡效果
Mar 17 Javascript
Vue中使用vux的配置详解
May 05 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
详解滑动穿透(锁body)终极探索
Apr 16 Javascript
js实现聊天对话框
Feb 08 Javascript
js实现无缝轮播图效果
Mar 09 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运行模式的深入理解
2013/06/03 PHP
解析smarty 截取字符串函数 truncate的用法介绍
2013/06/20 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
怎么在Windows系统中搭建php环境
2013/08/31 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
使用phpexcel类实现excel导入mysql数据库功能(实例代码)
2016/05/12 PHP
Yii遍历行下每列数据的方法
2016/10/17 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
JS event使用方法详解
2008/04/28 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
js中回调函数的学习笔记
2014/07/31 Javascript
javascript实时显示北京时间的方法
2015/03/12 Javascript
jQuery的ajax和遍历数组json实例代码
2016/08/01 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
2016/09/20 Javascript
jQuery插件DataTable使用方法详解(.Net平台)
2016/12/22 Javascript
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
2017/03/28 jQuery
Vue-cli项目获取本地json文件数据的实例
2018/03/07 Javascript
详解在vue-cli中使用graphql即vue-apollo的用法
2018/09/08 Javascript
js cavans实现静态滚动弹幕
2020/05/21 Javascript
JavaScript缺少insertAfter解决方案
2020/07/03 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
[01:03:33]Alliance vs TNC 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
python实现可视化动态CPU性能监控
2018/06/21 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
可口可乐广告词
2014/03/20 职场文书
培训班开班仪式主持词
2014/03/28 职场文书
重阳节简报
2015/07/20 职场文书
深入理解python多线程编程
2021/04/18 Python
Mysql服务添加 iptables防火墙策略的方案
2021/04/29 MySQL
深入理解CSS 中 transform matrix矩阵变换问题
2021/08/30 HTML / CSS