国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

數(shù)組(引用類型)復(fù)制問題

余學(xué)文 / 3262人閱讀

摘要:數(shù)組賦值問題涉及到拷貝堆棧空間基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的差異。把數(shù)組值重置成輸出結(jié)果是把數(shù)組值重置成輸出結(jié)果是親測用等方法進(jìn)行數(shù)組復(fù)制都是淺拷貝。

數(shù)組賦值問題涉及到拷貝、堆棧空間、基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的差異。(自行了解)

var arrA = [1,2,3,4,5];
var arrB = arrA;
// 把B數(shù)組值重置成0;
arrB.fill(0);
console.log(arrA);
console.log(arrB);

輸出結(jié)果是:arrA = [0,0,0,0,0], arrB = [0,0,0,0,0]

arrB的修改的同時也修改了arrA的值。

可采用淺拷貝和深拷貝解決問題:

淺拷貝子對象是基礎(chǔ)數(shù)據(jù)類型的修改不受影響,子對象是引用數(shù)據(jù)類型仍然會受影響

深拷貝,子對象是引用數(shù)據(jù)類型也不受影響。

  var arrA = [1, 2, 3, 4, 5];
  var arrB = arrA.slice(0, 5);
  // 把B數(shù)組值重置成0;
  arrB.fill(0);
  console.log(arrA);
  console.log(arrB);

輸出結(jié)果是:arrA = [1, 2, 3, 4, 5], arrB = [0, 0, 0, 0, 0];

  var arrA = [1, 2, [3, 4], 5, 6];
  var arrB = arrA.slice(0, 5);
  // 把B[2]數(shù)組值重置成0;
  for (var i = 0; i < arrB.length; i++) {
    if (arrB[i].length > 0) {
        arrB[i].fill(0);
    }
  }
  console.log(arrA);
  console.log(arrB);

輸出結(jié)果是:arrA = [1, 2, [0,0], 5, 6], arrB = [1, 2, [0,0], 5, 6];

親測: 用arrA.slice()/arrA.concat()/[...arrA]/Array.from(arrA)/Array.prototype.push.apply(arrB, arrA)/ arrA.map(function(item){return item;});等方法進(jìn)行數(shù)組復(fù)制都是淺拷貝。
(Object.assign({}, objA)對象淺拷貝)
var arrA = [1, 2, [3, 4], 5, 6];
var arrB = JSON.parse(JSON.stringify(arrA));
// 把B數(shù)組值重置成0;
arrB[2].fill(0);
console.log(arrA);
console.log(arrB);

輸出結(jié)果是:arrA = [1, 2, [3, 4], 5, 6], arrB = [1, 2, [0, 0], 5, 6];

var arrA = [1, undefined, [3, 4], 5, 6];
var arrB = JSON.parse(JSON.stringify(arrA));
// 把B數(shù)組值重置成0;
arrB[2].fill(0);
console.log(arrA);
console.log(arrB);

輸出結(jié)果是:arrA = [1, undefined, [3, 4], 5, 6], arrB = [1, null, [0, 0], 5, 6];

親測:  JSON.parse(JSON.stringify(arrA))JSON轉(zhuǎn)換是深拷貝,但是如果值為undefined會被轉(zhuǎn)為null。
let arrA = [1, 2, [3, 4], 5, 6];
let arrB = _.cloneDeepWith(arrA);
// 把B數(shù)組值重置成0;
arrB[2].fill(0);
console.log(arrA);
console.log(arrB);

輸出結(jié)果是:arrA = [1, undefined, [3, 4], 5, 6], arrB = [1, null, [0, 0], 5, 6];

可使用第三方庫如lodash封裝的方法。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/100572.html

相關(guān)文章

  • 詳解js深淺復(fù)制

    摘要:從而也引出了所謂的深淺復(fù)制問題。附注對于淺復(fù)制,其實還有其他的實現(xiàn)方式,比如數(shù)組中和方法,對于這些還是希望大家自己了解,本本主要針對深淺復(fù)制的實現(xiàn)原理進(jìn)行解析。 前言 在之前寫繼承的過程談到了深淺復(fù)制的問題,因為有讀者反映到需要解析,趁今天周末寫一篇解析,今天的主體相對之前來說理解難度低一些,篇幅可能也比較短,諸君按需閱讀即可。 從兩種數(shù)據(jù)類型說起 在js中,變量的類型可以大致分成兩種...

    Lin_YT 評論0 收藏0
  • 沒有對象?那就復(fù)制一個吧!(科普向,實際應(yīng)用向)

    摘要:基本數(shù)據(jù)類型將變量和值一起放在棧內(nèi)存引用數(shù)據(jù)類型則將變量放在棧內(nèi)存而將值放在堆內(nèi)存。該怎么理解沒圖我說個假設(shè)有個變量在內(nèi)存中是這樣的棧內(nèi)存中的變量指向堆內(nèi)存中一塊內(nèi)存相當(dāng)于持有該內(nèi)存的指針,而那塊內(nèi)存中存儲變量的相關(guān)內(nèi)容。 趁著周五沒那么忙,抽個空整理一下最近使用比較頻繁的一個小技術(shù) 對象的深復(fù)制。感覺啊,這個標(biāo)題和今天的節(jié)日(假裝不知道原來是情人節(jié))那么遙相呼應(yīng)。啊,沒有女朋友?沒有...

    amuqiao 評論0 收藏0
  • 深拷貝 vs 淺拷貝

    摘要:那么如何切斷和之間的關(guān)系呢,可以拷貝一份的數(shù)據(jù),根據(jù)拷貝的層級不同可以分為淺拷貝和深拷貝,淺拷貝就是只進(jìn)行一層拷貝,深拷貝就是無限層級拷貝。 深拷貝 vs 淺拷貝 深拷貝和淺拷貝都是針對的引用類型,JS中的變量類型分為值類型(基本類型)和引用類型;對值類型進(jìn)行復(fù)制操作會對值進(jìn)行一份拷貝,而對引用類型賦值,則會進(jìn)行地址的拷貝,最終兩個變量指向同一份數(shù)據(jù)。 // 基本類型 var a = ...

    sugarmo 評論0 收藏0
  • JS專題之深淺拷貝

    摘要:在之前的文章專題之?dāng)?shù)據(jù)類型和類型檢測中我有講過,中的數(shù)據(jù)類型分為兩種,基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,基本數(shù)據(jù)類型是保存在棧的數(shù)據(jù)結(jié)構(gòu)中的是按值訪問,所以不存在深淺拷貝問題。 前言 在開發(fā)過程中,偶爾會遇到這種場景,拿到一個數(shù)據(jù)后,你打算對它進(jìn)行處理,但是你又希望拷貝一份副本出來,方便數(shù)據(jù)對比和以后恢復(fù)數(shù)據(jù)。 那么這就涉及到了 JS 中對數(shù)據(jù)的深淺拷貝問題,所謂深淺拷貝,淺拷貝的意思就是,...

    ASCH 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<