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 相关文章推荐
asp.net+js 实现无刷新上传解析csv文件的代码
May 17 Javascript
你需要知道的10个最佳javascript开发实践小结
Apr 15 Javascript
JS过滤url参数特殊字符的实现方法
Dec 24 Javascript
Jquery与Bootstrap实现后台管理页面增删改查功能示例
Jan 22 Javascript
javascript深拷贝和浅拷贝详解
Feb 14 Javascript
bootstrapValidator 重新启用提交按钮的方法
Feb 20 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
Jul 17 Javascript
JS库 Highlightjs 添加代码行号的实现代码
Sep 13 Javascript
JS实现左边列表移到到右边列表功能
Mar 28 Javascript
vue的toast弹窗组件实例详解
May 14 Javascript
JavaScript封装单向链表的示例代码
Sep 17 Javascript
Vite和Vue CLI的优劣
Jan 30 Vue.js
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中几种常见安全设置详解
2010/04/06 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
一个js的tab切换效果代码[代码分离]
2010/04/11 Javascript
JS DOM 操作实现代码
2010/08/01 Javascript
用Javascript实现Windows任务管理器的代码
2012/03/27 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
JS/jQuery实现默认显示部分文字点击按钮显示全部内容
2013/05/13 Javascript
了解了这些才能开始发挥jQuery的威力
2013/10/10 Javascript
jQuery控制iFrame(实例代码)
2013/11/19 Javascript
百度判断手机终端并自动跳转js代码及使用实例
2014/06/11 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
AngularJS Phonecat实例讲解
2016/11/21 Javascript
详解vue.js组件化开发实践
2016/12/14 Javascript
Angular排序实例详解
2017/06/28 Javascript
微信小程序wx.request实现后台数据交互功能分析
2017/11/25 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
浅谈Node框架接入ELK实践总结
2019/02/22 Javascript
深入浅析golang zap 日志库使用(含文件切割、分级别存储和全局使用等)
2020/02/19 Javascript
python中装饰器级连的使用方法示例
2017/09/29 Python
pandas将DataFrame的列变成行索引的方法
2018/04/10 Python
pygame游戏之旅 添加碰撞效果的方法
2018/11/20 Python
Django forms表单 select下拉框的传值实例
2019/07/19 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
Python collections模块的使用方法
2020/10/09 Python
Qoo10台湾站:亚洲领先的在线市场
2018/05/15 全球购物
党员个人思想汇报
2013/12/28 职场文书
婚礼主持结束词
2014/03/13 职场文书
新员工试用期自我鉴定
2014/04/17 职场文书
2015年师德师风承诺书
2015/01/22 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
python 实现的截屏工具
2021/05/08 Python
关于Nginx中虚拟主机的一些冷门知识小结
2022/03/03 Servers