JS 数组和对象的深拷贝操作示例
本文实例讲述了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.jb51.net/code/HtmlJsRun测试上述代码运行效果。
更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
相关推荐
-
javascript二维数组和对象的深拷贝与浅拷贝实例分析
本文实例讲述了javascript二维数组和对象的深拷贝与浅拷贝.分享给大家供大家参考,具体如下: 这篇文章主要为大家详细介绍了js实现数组和对象的深浅拷贝, 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新数组,新对象/数组只是原对象的一个引用 2.深拷贝: 创建一个新的对象和数组,将原对象的各项属性的"值"(数组的所有元素)拷贝过来,是"值"而不是"引用" JavaScript的数据类型分为原始数据类型和对象类型.二者在内存中存放的方式
-
JS实现数组深拷贝的方法分析
本文实例讲述了JS实现数组深拷贝的方法.分享给大家供大家参考,具体如下: 最近在网上看到一篇关于js数组复制最有效的方法是直接使用slice和concat方法.这2个方法的确是最快的把数组成功复制,而不是引用.可以运行实例: <script type="text/javascript"> <!-- var arr1=["1","2","3"],arr2; arr2=arr1.slice(0); arr1[0]
-
浅谈JavaScript中面向对象的的深拷贝和浅拷贝
理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型. 1.值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量. 例如:var num = 123 :var num1=num; 表示变量中存储的数字是 123.然后将数据拷贝一份,就是将 123 拷贝一份. 那么内存中有 2 个 数组;将拷贝数据赋值给 num2,其特点是在内存中有两个数据副本.这可以理解为浅拷贝. 2.引用类型的赋值. var o={name:'张三'}: var obj=o;
-
JavaScript对象的浅拷贝与深拷贝实例分析
本文实例讲述了JavaScript对象的浅拷贝和深拷贝.分享给大家供大家参考,具体如下: 1.浅拷贝 仅仅复制对象的引用,而不是对象本身. var person = { name: 'Alice', friends: ['Bruce', 'Cindy'] } var student = { id: 30 } student = simpleClone(person, student); student.friends.push('David'); alert(person.friends); f
-
js对象浅拷贝和深拷贝详解
本文为大家分享了JavaScript对象的浅拷贝和深拷贝代码,供大家参考,具体内容如下 1.浅拷贝 拷贝就是把父对像的属性,全部拷贝给子对象. 下面这个函数,就是在做拷贝: var Chinese = { nation:'中国' } var Doctor = { career:'医生' } function extendCopy(p) { var c = {}; for (var i in p) { c[i] = p[i]; } c.uber = p; return c; } 使用的时候,这样写
-
JavaScript基于遍历操作实现对象深拷贝功能示例
本文实例讲述了JavaScript基于遍历操作实现对象深拷贝功能.分享给大家供大家参考,具体如下: function getType(o){ var _t; return ((_t = typeof(o)) == "object" ? o==null && "null" || Object.prototype.toString.call(o).slice(8,-1):_t).toLowerCase(); } function extend(desti
-
JavaScript数组深拷贝和浅拷贝的两种方法
例如这个例子: 复制代码 代码如下: var arr = ["One","Two","Three"]; var arrto = arr;arrto[1] = "test";document.writeln("数组的原始值:" + arr + "<br />");//Export:数组的原始值:One,test,Threedocument.writeln("数组的新值
-
JS赋值、浅拷贝和深拷贝(数组和对象的深浅拷贝)实例详解
本文实例讲述了JS赋值.浅拷贝和深拷贝(数组和对象的深浅拷贝).分享给大家供大家参考,具体如下: 深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的. 浅拷贝 只是拷贝了基本类型的数据,而引用类型数据,复制后也是会发生引用,我们把这种拷贝叫做浅拷贝(浅复制) 浅拷贝只复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存.但深拷贝会另外创造一个一模一样的对象,新对象跟原对象不共享内存,修改新对象不会改到原对象. 赋值和浅拷贝的区别 当我们把一个对象赋值给一个新的变
-
JavaScript 中对象的深拷贝
对象的深拷贝与浅拷贝的区别如下: 浅拷贝:仅仅复制对象的引用,而不是对象本身: 深拷贝:把复制的对象所引用的全部对象都复制一遍. 一. 浅拷贝的实现 浅拷贝的实现方法比较简单,只要使用是简单的复制语句即可. 1.1 方法一:简单的复制语句 /* ================ 浅拷贝 ================ */ function simpleClone(initalObj) { var obj = {}; for ( var i in initalObj) {
-
JS 数组和对象的深拷贝操作示例
本文实例讲述了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); ar
-
JS实现json对象数组按对象属性排序操作示例
本文实例讲述了JS实现json对象数组按对象属性排序操作.分享给大家供大家参考,具体如下: 在实际工作经常会出现这样一个问题:后台返回一个数组中有i个json数据,需要我们根据json中某一项进行数组的排序. 例如返回的数据结构大概是这样: { result:[ {id:1,name:'中国银行'}, {id:3,name:'北京银行'}, {id:2,name:'河北银行'}, {id:10,name:'保定银行'}, {id:7,name:'涞水银行'} ] } 现在我们根据业务需要,要根据
-
JS数组中对象去重操作示例
本文实例讲述了JS数组中对象去重操作.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net js数组中对象去重</title> </head> <body> <script> var tmp = [ { "
-
JS实现将二维数组转为json格式字符串操作示例
本文实例讲述了JS实现将二维数组转为json格式字符串操作.分享给大家供大家参考,具体如下: <!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <title>json</title> <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js
-
JS实现数组的增删改查操作示例
本文实例讲述了JS实现数组的增删改查操作.分享给大家供大家参考,具体如下: 1.给原数组中 新增 用到 push 改变原数组的长度并返回新的长度,新元素添加在原数组的末尾 <doctype> <html> <head>元素新增数组</head> <body> <div id="dem">点击会给原素组末尾新增元素个数</div> <button onclick="funct()"
-
JS数组Object.keys()方法的使用示例
本文实例讲述了JS数组Object.keys()方法.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net Object.keys()方法</title> </head> <body> <script type="
-
PHP面向对象程序设计之对象的遍历操作示例
本文实例讲述了PHP面向对象程序设计之对象的遍历操作.分享给大家供大家参考,具体如下: 对象的遍历和数组的遍历一样,对象的遍历指的是实例属性的遍历. 下面遍历出来的属性,是在该范围中的"可访问属性"(要考虑访问权限). <?php class A{ public $p1 = 1; protected $p2 = 2; private $p3 = 3; static $p4 = 4; } $obj1 = new A(); foreach($obj1 as $key => $v
-
JS实现的base64加密解密操作示例
本文实例讲述了JS实现的base64加密解密操作.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>js base64加密解密</title> </head> <body> <script> // 创建Base64对象 var Base64 = { _keyStr: &qu
-
JS实现的DOM插入节点操作示例
本文实例讲述了JS实现的DOM插入节点操作.分享给大家供大家参考,具体如下: 一 介绍 插入节点通过使用insertBefore()方法来实现. insertBefore()方法将在另一个子节点前插入新的子节点. obj.insertBefore(new,ref) new:表示新的子节点. ref:指定一个节点,在这个节点前插入新的节点. 二 应用 插入节点,本示例在页面的文本框中输入需要插入的文本,然后通过单击"前插入"按钮将文本插入到页面中. 三 完整示例代码: <!DOCT
随机推荐
- ASP.NET MVC 5使用X.PagedList.Mvc进行分页教程(PagedList.Mvc)
- 教你自动恢复MySQL数据库的日志文件(binlog)
- 使用jQuery获取data-的自定义属性
- Angular.js中angular-ui-router的简单实践
- angularjs表格分页功能详解
- Windows2003 MSSQL 安全设置教程
- PHP 错误之引号中使用变量
- CI(CodeIgniter)框架视图中加载视图的方法
- 学习ASP的理由 分析小结
- SSH框架网上商城项目第27战之申请域名空间和项目部署及发布
- Apache服务器的安装步骤(图文教程)
- 三种东西永远不要放到mysql数据库里
- WPF TextBox和PasswordBox添加水印
- Mysql中Join的使用实例详解
- 浅谈C++中对象的复制与对象之间的相互赋值
- java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion问题解决方法
- Android 读取资源文件实例详解
- PHP HTML代码串截取代码
- 利用php生成验证码
- PHP实现负载均衡session共享redis缓存操作示例