在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 對(duì)象數(shù)組賦值給另一個(gè)數(shù)組,在操作新數(shù)組,怎么使原數(shù)組不變

對(duì)象數(shù)組賦值給另一個(gè)數(shù)組,在操作新數(shù)組,怎么使原數(shù)組不變

var c = self.threeData1;
                                        var threeData2 = c.concat();
                                        
                                         threeData2.forEach(function(iten){
                                            iten.price = "---"
                                         })
                                       console.log("c",c)
                                       console.log("threeData2",threeData2)
回答
編輯回答
奧特蛋
  1. 原數(shù)組treeData1中的元素都是object,也就是引用類型。
  2. concat方法是合并兩個(gè)數(shù)組,類似將object1賦值給object2,此時(shí)對(duì)object1的屬性a進(jìn)行修改,此時(shí)object2a屬性與object1的a屬性值相同。

所以修改了第一個(gè)數(shù)組中某個(gè)元素的屬性,新數(shù)組中對(duì)應(yīng)元素屬性也被修改。

總結(jié)起來就是值類型數(shù)據(jù)和引用類型數(shù)據(jù)的拷貝/克隆問題。
引用類型數(shù)據(jù)賦值時(shí),是賦值此對(duì)象的指針,而并不是存儲(chǔ)在堆中的對(duì)象。

2017年8月18日 18:27
編輯回答
舊顏
2017年8月24日 17:56
編輯回答
墨沫

因?yàn)閷?duì)象賦值,他們指向的是同一個(gè)應(yīng)用,所以會(huì)改變。

2017年8月24日 01:34
編輯回答
枕邊人

數(shù)組賦值的時(shí)候,用lodashcloneDeep方法。

var arr2 = cloneDeep(arr1)

或者其他可以深拷貝的方法:
https://segmentfault.com/a/11...

歸根結(jié)底,就是數(shù)組直接賦值的時(shí)候,新數(shù)組和原數(shù)組的地址會(huì)指向同一塊內(nèi)存地址,所以改原數(shù)組,新數(shù)組也會(huì)改。

2018年4月5日 01:47
編輯回答
朽鹿

深拷貝了解一下,可以使用JSON.parse(JSON.stringify(arr))實(shí)現(xiàn)深拷貝,方法的弊端可以自己去了解下

2017年7月6日 04:34