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 相关文章推荐
键盘 keycode的值 javascript时触发事件时很有用的要素
Nov 02 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
JavaScript中的replace()方法使用详解
Jun 06 Javascript
Bootstrap每天必学之滚动监听
Mar 16 Javascript
如何使用jquery修改css中带有!important的样式属性
Apr 28 Javascript
jquery简单插件制作(fn.extend)完整实例
May 24 Javascript
jQuery+CSS3实现四种应用广泛的导航条制作实例详解
Sep 17 Javascript
javascript显示系统当前时间代码
Dec 29 Javascript
JSON字符串和JSON对象相互转化实例详解
Jan 05 Javascript
JavaScript高阶函数_动力节点Java学院整理
Jun 28 Javascript
js微信分享实现代码
Oct 11 Javascript
js仿360开机效果
Dec 26 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
解析php防止form重复提交的方法
2013/07/01 PHP
PHP加MySQL消息队列深入理解
2021/02/27 PHP
IE中直接运行显示当前网页中的图片 推荐
2006/08/31 Javascript
jquery创建并行对象或者合并对象的实现代码
2012/10/10 Javascript
使用jquery读取html5 localstorage的值的方法
2013/01/04 Javascript
AngularJS入门教程(零):引导程序
2014/12/06 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
使用Node.js实现HTTP 206内容分片的教程
2015/06/23 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
JavaScript模块详解
2017/12/18 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
微信小程序上传图片实例
2018/05/28 Javascript
JavaScript实现京东购物放大镜和选项卡效果的方法分析
2018/07/05 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
2019/04/15 Javascript
vue 实现搜索的结果页面支持全选与取消全选功能
2019/05/10 Javascript
Vue实现push数组并删除的例子
2019/11/01 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
原生JavaScript实现贪吃蛇游戏
2020/11/04 Javascript
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python列表list数组array用法实例解析
2014/10/28 Python
复习Python中的字符串知识点
2015/04/14 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
利用pyinstaller打包exe文件的基本教程
2019/05/02 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
Python使用Pygame绘制时钟
2020/11/29 Python
移动端Html5页面生成图片解决方案
2018/08/07 HTML / CSS
菲律宾领先的在线时尚商店:Zalora菲律宾
2018/02/08 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
司法局2014法制宣传日活动总结
2014/11/01 职场文书
鲁滨逊漂流记读书笔记
2015/06/26 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书