日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝

發(fā)布時間:2025/5/22 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、一個簡單的js方法實(shí)現(xiàn)集合拷貝

  做web項目的時候,少不了和js中的數(shù)組,集合等對象接觸,那么你肯定會發(fā)現(xiàn),在js中存在一個怪異的現(xiàn)象就是數(shù)組和集合的拷貝都是地址復(fù)制,并不是簡單的數(shù)據(jù)的拷貝。

舉個例子:

//創(chuàng)建一個集合 var arr1=[{name:'小明',age:'22'},{name:'小剛',age:'23'}] //再創(chuàng)建一個空集合 var arr2=[] //開始拷貝集合arr1的第一個元素數(shù)據(jù)到集合arr2中 arr2.push(arr1[0]) //取出arr2中的數(shù)據(jù),修改一下屬性值 arr2[0].name="小強(qiáng)"

那么這個時候,集合arr1和arr2的數(shù)會發(fā)生怎么樣的變化呢?

按照正常的邏輯,我們只改變了集合arr2的數(shù)據(jù),那么arr1中的數(shù)據(jù)肯定是不會受到影響的。但是,事實(shí)卻是arr1集合中的數(shù)據(jù),也發(fā)生了變化。

請看下面的debugger測試截圖

從上圖可以清晰看到,arr1中的數(shù)據(jù)也發(fā)生了變化,也就是說?

//開始拷貝集合arr1的第一個元素數(shù)據(jù)到集合arr2中 arr2.push(arr1[0])

?

?實(shí)際上集合arr2是把集合arr1第一個元素對象的引用(地址)拷貝過來了,這樣的拷貝會導(dǎo)致一改全改的現(xiàn)象,不是我們想要的。那么如何避免這種現(xiàn)象呢?

很簡單,看下面的代碼:

//實(shí)現(xiàn)原生js-Copy方法function copyObj(arr){var obj=arr instanceof Array?[]:{};for(var item in arr){if(typeof arr[item]=== "object"){obj[item]=copyObj(arr[item]);}else{obj[item]=arr[item];}}return obj;}

?

使用上面的copy()方法再試試看:

//創(chuàng)建一個集合 var arr1=[{name:'小明',age:'22'},{name:'小剛',age:'23'}] //再創(chuàng)建一個空集合 var arr2=[] //開始拷貝集合arr1的第一個元素數(shù)據(jù)到集合arr2中 var eachData=arr1[0]; arr2.push(copy(eachData)) //取出arr2中的數(shù)據(jù),修改一下屬性值 arr2[0].name="小強(qiáng)"

?

再看一下,此時的情況吧!

?

?

效果是不是很明顯哈!

?

轉(zhuǎn)載于:https://www.cnblogs.com/newwind/p/8920657.html

總結(jié)

以上是生活随笔為你收集整理的js/jq基础(日常整理记录)-2-一个简单的js方法实现集合的非引用拷贝的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。