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 闭包深入理解(closure)
May 27 Javascript
从零开始学习jQuery (三) 管理jQuery包装集
Feb 23 Javascript
Ext JS 4官方文档之三 -- 类体系概述与实践
Dec 16 Javascript
js截取固定长度的中英文字符的简单实例
Nov 22 Javascript
jquery表单验证框架提供的身份证验证方法(示例代码)
Dec 27 Javascript
JavaScript中的函数的两种定义方式和函数变量赋值
May 12 Javascript
详解javascript中的事件处理
Nov 06 Javascript
jQuery Mobile 触摸事件实例
Jun 04 Javascript
BootStrap学习系列之Bootstrap Typeahead 组件实现百度下拉效果(续)
Jul 07 Javascript
div实现自适应高度的textarea实现angular双向绑定
Jan 08 Javascript
vuex 使用文档小结篇
Jan 11 Javascript
vue-cli项目中使用公用的提示弹层tips或加载loading组件实例详解
May 28 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 缓存函数代码
2008/08/27 PHP
比较好用的PHP防注入漏洞过滤函数代码
2012/04/11 PHP
PHP的全局错误处理详解
2016/04/25 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
JavaScript中为什么null==0为false而null大于=0为true(个人研究)
2013/09/16 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
js类式继承与原型式继承详解
2016/04/07 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
微信小程序实现文字跑马灯效果
2020/05/26 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python中实现参数类型检查的简单方法
2015/04/21 Python
Python采用Django开发自己的博客系统
2020/09/29 Python
Python实现图片滑动式验证识别方法
2017/11/09 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
美的官方商城:Midea
2016/09/14 全球购物
宝拉珍选官方旗舰店:2%水杨酸精华液,收缩毛孔粗大和祛痘
2018/07/01 全球购物
体育教育毕业生自荐信
2013/11/21 职场文书
服装公司总经理岗位职责
2013/11/30 职场文书
大专生自我评价
2014/01/28 职场文书
简历自我评价模版
2014/01/31 职场文书
高中军训感言400字
2014/02/24 职场文书
信息学院毕业生自荐信范文
2014/03/04 职场文书
个人贷款担保书
2014/04/01 职场文书
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
单位接收证明格式
2015/06/18 职场文书
2016大学生形势与政策心得体会
2016/01/12 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书