數(shù)組的深淺復(fù)制

由于數(shù)組不是js的基本類型,我們在對(duì)數(shù)組進(jìn)行備份嘴办,如果只是簡單的將它賦值給其他變量,那么我們只要改變其中任何一個(gè)买鸽,其他的變量的數(shù)組也會(huì)跟著改變涧郊。實(shí)際應(yīng)用中就會(huì)產(chǎn)生bug

    // 淺復(fù)制
    var arr = ["one","two","three"];
    var arrto = arr;
    console.log(arr, arrto); // ["one","two","three"] ["one","two","three"]
    arrto[0] = 1;
    console.log(arr, arrto); // [1,"two","three"] ["one","two","three"]

改變數(shù)組arrto,arr也會(huì)受到影響眼五,像這種直接賦值數(shù)組的方式就是淺復(fù)制妆艘,引發(fā)這種現(xiàn)象的原因是因?yàn)閿?shù)組是引用數(shù)據(jù)類型,arrto = arr 是將arr數(shù)組的引用地址傳遞給了 arrto看幼,arrto 與 arr 指向的是同一個(gè)數(shù)組批旺。要避免這類情況發(fā)生我們可以 對(duì)數(shù)組進(jìn)行深復(fù)制

    // 深復(fù)制
    var arr = ["one","two","three"];
    var arrto = [];
    for (var i = 0; i < arr.length; i++) {
        arrto[i] = arr[i];
    }
    console.log(arr, arrto); // ["one","two","three"] ["one","two","three"]
    arrto[0] = 1;
    console.log(arr, arrto); // ["one","two","three"] [1,"two","three"]

arr數(shù)組中的每個(gè)元素都是字符串,屬于js的基本類型诵姜,可以直接傳遞值汽煮,遍歷數(shù)組arr將數(shù)組中的每個(gè)元素傳給新數(shù)組arrto就能實(shí)現(xiàn)數(shù)組的深復(fù)制。
使用一些js的函數(shù)也能實(shí)現(xiàn)數(shù)組的深復(fù)制

使用js內(nèi)置函數(shù)實(shí)現(xiàn)深復(fù)制
1.slice 可以從已有的數(shù)組中返回選定的元素棚唆,且返回的是一個(gè)新數(shù)組

    var arr = ["one","two","three"];
    var arrto = arr.slice(0);
    console.log(arr, arrto); // ["one","two","three"] ["one","two","three"]
    arrto[0] = 1;
    console.log(arr, arrto); // ["one","two","three"] [1,"two","three"]

使用slice返回新數(shù)組后改變arrto的值暇赤,arr并未改變

2.concat : 連接兩個(gè)或多個(gè)數(shù)組,返回新數(shù)組

    var arr = ["one","two","three"];
    var arrto = arr.concat([]);
    console.log(arr, arrto); // ["one","two","three"] ["one","two","three"]
    arrto[0] = 1;
    console.log(arr, arrto); // ["one","two","three"] [1,"two","three"]

3.map :返回一個(gè)由原數(shù)組中的每個(gè)元素調(diào)用一個(gè)指定方法后的返回值組成的新數(shù)組。

    var arr = ["one","two","three"];
    var arrto = arr.map(ele=>ele);
    console.log(arr, arrto); // ["one","two","three"] ["one","two","three"]
    arrto[0] = 1;
    console.log(arr, arrto); // ["one","two","three"] [1,"two","three"]

總結(jié):數(shù)組由于不是js的基本類型宵凌,不能進(jìn)行直接傳值鞋囊,需要遍歷數(shù)組的每一個(gè)基本類型的元素傳值,最后構(gòu)建新的數(shù)組瞎惫。與數(shù)組類似 溜腐,js的對(duì)象也直接復(fù)制也會(huì)產(chǎn)生與數(shù)組相同的問題,要實(shí)現(xiàn)深拷貝瓜喇,需遍歷對(duì)象的每個(gè)屬性挺益。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市欠橘,隨后出現(xiàn)的幾起案子矩肩,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黍檩,死亡現(xiàn)場離奇詭異叉袍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)刽酱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門喳逛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人棵里,你說我怎么就攤上這事润文。” “怎么了殿怜?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵典蝌,是天一觀的道長。 經(jīng)常有香客問我头谜,道長骏掀,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任柱告,我火速辦了婚禮截驮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘际度。我一直安慰自己葵袭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布乖菱。 她就那樣靜靜地躺著坡锡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪块请。 梳的紋絲不亂的頭發(fā)上娜氏,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音墩新,去河邊找鬼贸弥。 笑死,一個(gè)胖子當(dāng)著我的面吹牛海渊,可吹牛的內(nèi)容都是我干的绵疲。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼臣疑,長吁一口氣:“原來是場噩夢啊……” “哼盔憨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起讯沈,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤郁岩,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體问慎,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萍摊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了如叼。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰木。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖笼恰,靈堂內(nèi)的尸體忽然破棺而出踊沸,到底是詐尸還是另有隱情,我是刑警寧澤社证,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布逼龟,位于F島的核電站,受9級(jí)特大地震影響追葡,放射性物質(zhì)發(fā)生泄漏审轮。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一辽俗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧篡诽,春花似錦崖飘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至达椰,卻和暖如春翰蠢,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背啰劲。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工梁沧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蝇裤。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓廷支,卻偏偏與公主長得像,于是被迫代替她去往敵國和親栓辜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子恋拍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 數(shù)組的定義 數(shù)組是按序號(hào)排列的一組值,每個(gè)值的位置都有編號(hào)(從0開始)藕甩。數(shù)組本質(zhì)上是一種特殊的對(duì)象施敢。它的鍵名是按(...
    Allin_Lin閱讀 545評(píng)論 0 0
  • 由于最近都在freecodecamp上刷代碼,運(yùn)用了很多JavaScript數(shù)組的方法,因此做了一份關(guān)于JavaS...
    2bc5f46e925b閱讀 1,965評(píng)論 0 16
  • 來源:NumPy Tutorial - TutorialsPoint 譯者:飛龍 協(xié)議:CC BY-NC-SA 4...
    布客飛龍閱讀 32,713評(píng)論 6 96
  • 1僵娃、假消息攻擊是指利用網(wǎng)絡(luò)協(xié)議設(shè)計(jì)中的安全缺陷概作,通過發(fā)送偽裝的數(shù)據(jù)包達(dá)到欺騙目標(biāo)、從中獲利的目的悯许。 是一種內(nèi)網(wǎng)滲透...
    minlover閱讀 1,576評(píng)論 0 5
  • 那句話怎么說來著“管理無大事仆嗦,小事都解決好了就沒事了,小事解決不好全是大事”先壕。 細(xì)節(jié)很重要瘩扼,細(xì)節(jié)決定了一件...
    姜楊A(yù)da閱讀 323評(píng)論 0 0