您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

js中对象深层复制失败的原因以及解决办法(代码)

2025/1/18 15:29:47发布12次查看
本篇文章给大家带来的内容是关于js中对象深层复制失败的原因以及解决办法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
js 有过体验才知,其实还是有点坑,
<!doctype html><html> <head> <meta charset="utf-8" /> <title>测试</title> <script type="text/javascript"> // 排序算法 function bubblesort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; } // 定义一个json ab var ab = {a:[2,1,3,9,4],b:[8,5,3]} // 定义一个json bc var bc = {}; // 将json ab 深拷贝给json bc for(var i in ab){ bc[i]=ab[i]; } // 对json bc 排序 bubblesort(bc['a']) bubblesort(bc['b']) // 分别打印 json ab ,json bc ,发现经过排序之后 对 json bc排序之后, // json ab也被排序,此时意味着深层拷贝失败 document.write('-----------------------'+'<br/>'); document.write(json.stringify(ab)); document.write('<br/>'+'-----------------------'+'<br/>'); document.write(json.stringify(bc)); </script> </head> <body> </body></html>
当时我的结果是这样的:
原object 是: {a:[2,1,3,9,4],b:[8,5,3]}
后经过各种烧脑,终于发现其原因在此:
这个深层复制,如果复制的对象经过排序之后,会使复制失效,复制之后的对象排序之后的变化,依旧会复制到之前的最初始对象
所以只要换一张对象拷贝(复制)方法,就可以了,example 如下:
<!doctype html><html> <head> <meta charset="utf-8" /> <title>测试</title> <script type="text/javascript"> // 排序算法 function bubblesort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1]) { //相邻元素两两对比 var temp = arr[j+1]; //元素交换 arr[j+1] = arr[j]; arr[j] = temp; } } } return arr; } // 定义一个json ab var ab = {a:[2,1,3,9,4],b:[8,5,3]} // 定义一个json bc var bc = {}; // 将json ab 深拷贝给json bc /*for(var i in ab){ bc[i]=ab[i]; }*/ function clone(obj) { // handle the 3 simple types, and null or undefined or function if (null == obj || "object" != typeof obj) return obj; // handle date if (obj instanceof date) { var copy = new date(); copy.settime(obj.gettime()); return copy; } // handle array or object if (obj instanceof array | obj instanceof object) { var copy = (obj instanceof array)?[]:{}; for (var attr in obj) { if (obj.hasownproperty(attr)) copy[attr] = clone(obj[attr]); } return copy; } throw new error("unable to clone obj! its type isn't supported."); } bc = clone(ab); // 对json bc 排序 bubblesort(bc['a']) bubblesort(bc['b']) // 分别打印 json ab ,json bc ,发现经过排序之后 对 json bc排序之后, json ab也被排序,此时意味着深层拷贝失败 document.write('-----------------------'+'<br/>'); document.write(json.stringify(ab)); document.write('<br/>'+'-----------------------'+'<br/>'); document.write(json.stringify(bc)); </script> </head> <body> </body></html>
这次结果完美!
相关推荐:
php ci框架中加载css和js文件失败的原因及解决方法,
javascript对象的深浅复制实例详解
以上就是js中对象深层复制失败的原因以及解决办法(代码)的详细内容。
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product