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 相关文章推荐
JQuery中的ready函数冲突的解决方法
May 17 Javascript
JavaScript对象链式操作代码(jquery)
Jul 04 Javascript
面向对象的Javascript之二(接口实现介绍)
Jan 27 Javascript
Angular2表单自定义验证器的实现
Oct 19 Javascript
javascript学习之json入门
Dec 22 Javascript
原生JS实现几个常用DOM操作API实例
Jan 19 Javascript
原生js实现吸顶效果
Mar 13 Javascript
AngularJS实现tab选项卡的方法详解
Jul 05 Javascript
React Native实现进度条弹框的示例代码
Jul 17 Javascript
浅谈vue的踩坑路
Aug 31 Javascript
js 解析 JSON 数据简单示例
Apr 21 Javascript
浅谈vue-props的default写不写有什么区别
Aug 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
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
php发送get、post请求的6种方法简明总结
2014/07/08 PHP
举例讲解PHP面对对象编程的多态
2015/08/12 PHP
PHP关于foreach复制知识点总结
2019/01/28 PHP
js实现的网页颜色代码表全集
2007/07/17 Javascript
JS中的prototype与面向对象的实例讲解
2013/05/22 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
js 数组去重的四种实用方法
2014/09/09 Javascript
Vue.js组件tabs实现选项卡切换效果
2016/12/01 Javascript
利用jquery正则表达式在页面验证url网址输入是否正确
2017/04/04 jQuery
Bootstrap Table中的多选框删除功能
2018/07/15 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
2019/04/28 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
解决ant Design中this.props.form.validateFields未执行的问题
2020/10/27 Javascript
Python标准库之sqlite3使用实例
2014/11/25 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
Django 中使用流响应处理视频的方法
2018/07/20 Python
简单了解python反射机制的一些知识
2019/07/13 Python
python rsa实现数据加密和解密、签名加密和验签功能
2019/09/18 Python
PyCharm无法引用自身项目解决方式
2020/02/12 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
5行Python代码实现图像分割的步骤详解
2020/05/25 Python
python实现从ftp上下载文件的实例方法
2020/07/19 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
物业管理求职自荐信
2013/09/25 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
程序员求职信
2014/04/16 职场文书
大学新生军训方案
2014/05/03 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
五好家庭申报材料
2014/12/20 职场文书
护士自荐信怎么写
2015/03/06 职场文书
公司表扬信格式
2015/05/04 职场文书
2015秋季开学典礼演讲稿
2015/07/16 职场文书
使用feign服务调用添加Header参数
2021/06/23 Java/Android