成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

一種深拷貝的解決思路

Ocean / 1414人閱讀

摘要:用來實(shí)現(xiàn)數(shù)組的拷貝,先試試傳入表示截取全部你家的我要修改成我的名字看到結(jié)果我又懵了,你這是幾個(gè)意思啊,我死了兩千多個(gè)腦細(xì)胞才想出來的思路,竟然還是會(huì)改變,查詢的資料顯示確實(shí)可以實(shí)現(xiàn)拷貝而不改變原數(shù)組的功能啊,難道看漏了。

背景

最近在做數(shù)據(jù)處理的過程中,遇到一個(gè)問題,如下:
后臺(tái)傳遞過來一組數(shù)據(jù) Array,每個(gè)數(shù)組元素里面又包含了子對(duì)象,我要對(duì)這組數(shù)據(jù)進(jìn)行處理,但是不想影響到原數(shù)組,同時(shí)原數(shù)組可能會(huì)要進(jìn)行多個(gè)方向的數(shù)據(jù)格式化,為了渲染不同的界面。

原始數(shù)據(jù)
let data = [
    {
        id: 1,
        name: "luoxue",
        age: 25
    },
    {
        id: 2,
        name: "kk",
        age: 22
    },
    {
        id: 3,
        name: "qiuxia",
        age: 22
    }
];
處理方案

1、直接用 = 賦值

let myData = data; // 我要的數(shù)據(jù)
let yourData = data; // 你要的數(shù)據(jù)
myData[0].name = "luoxue-xu"; // 我要修改成我的名字
yourData[0].name = "kk-z"; // 你要修改成你的名字
console.log(data[0].name); // kk-z

不管是對(duì) myData 還是對(duì) yourData 操作,都改變了原來的 data,我心慌啊,原數(shù)據(jù)怎么能亂動(dòng)呢,要是它主人追究怎么辦?我又弱又餓,跑不過也打不過,左思右想,有了第二種思路。

2、用 slice 來實(shí)現(xiàn)數(shù)組的拷貝,先試試

let myData = data.slice(0); // 傳入0 表示截取全部
let yourData = data.slice(0); // 你家的
myData[0].name = "luoxue-xu"; // 我要修改成我的名字
console.log(data[0].name); // luoxue-xu

看到結(jié)果我又懵了,你這是幾個(gè)意思啊,我死了兩千多個(gè)腦細(xì)胞才想出來的思路,竟然還是會(huì)改變,查詢的資料顯示 slice 確實(shí)可以實(shí)現(xiàn)拷貝而不改變原數(shù)組的功能啊,難道看漏了。
再認(rèn)真看了遍資料,有點(diǎn)思緒,slice 雖然返回的是一個(gè)新數(shù)組,但是元素如果是對(duì)象,該引用的還是引用,原來如此。
slice 相當(dāng)于數(shù)組的淺拷貝,如果數(shù)組中的元素是基本類型,那就可以通過它來實(shí)現(xiàn)拷貝。

江湖走馬,風(fēng)也好,雨也罷 ------《道君》

3、用 JSON 轉(zhuǎn),先轉(zhuǎn)字符串,再轉(zhuǎn)回對(duì)象

let myData = JSON.parse(JSON.stringify(data)); // 我家的
let yourData = JSON.parse(JSON.stringify(data)); // 你家的
yourData[0].name = "kk-z"; // 你名字帶走
console.log(data[0].name); // luoxue

咦,還有點(diǎn)靠譜的樣子,竟然可以,這么簡單,不會(huì)有什么坑吧,先用著試試,不過 jQuery.extend 也可以實(shí)現(xiàn),難道它也是這樣做的,不太可能,再思考思考。

4、自己寫個(gè)深拷貝的函數(shù) clone

const clone = (b) => {
  if(Array.isArray(b)) {
    // 數(shù)組拷貝
    let obj = [];
    for(let i = 0; i < b.length; i++) {
      obj[i] = clone(b[i]);
    }
    return obj;
  }else if(b instanceof Object) {
    // 對(duì)象拷貝
    let obj = {};
    for(let attr in b) {
      obj[attr] = clone(b[attr]);
    }
    return obj;
  }else {
    return b;
  }
}
let myData = clone(data); // 我家的
let yourData = clone(data); // 還是我家的
yourData[0].name = "luoxue-kk"; // 還是我家的
console.log(data[0].name); // 返回什么,不告訴你,雖然報(bào)錯(cuò)了.

有空可以研究一下 Object.assign 的使用。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/83544.html

相關(guān)文章

  • JavaScript對(duì)象深拷貝/淺拷貝遇到坑和解決方法

    摘要:在以上討論和研究結(jié)束后,同學(xué)向我推薦了一個(gè)庫,測試了一下該庫存在方法,實(shí)現(xiàn)深拷貝更為完整和精致,前文問題均沒有在該方法內(nèi)被發(fā)現(xiàn),在這里提一波。 如果本文對(duì)您有任何幫助或者您有任何想要提出的意見或問題,請?jiān)诒疚南路交貜?fù),誠摯歡迎各位參與討論,望各位不吝指教。原載自己的小博客 JavaScript對(duì)象拷貝遇到的坑和解決方法 | 手柄君的小閣,所以無恥地算原創(chuàng)吧 近期參與某集訓(xùn),Java...

    atinosun 評(píng)論0 收藏0
  • 拷貝終極探索(99%人都不知道)

    摘要:劃重點(diǎn),這是一道面試必考題,我靠這道題刷掉了多少面試者嘿嘿首先這是一道非常棒的面試題,可以考察面試者的很多方面,比如基本功,代碼能力,邏輯能力,而且進(jìn)可攻,退可守,針對(duì)不同級(jí)別的人可以考察不同難度,比如漂亮妹子就出題,要是個(gè)帥哥那就得上了, 劃重點(diǎn),這是一道面試必考題,我靠這道題刷掉了多少面試者?(? ? ??)嘿嘿 首先這是一道非常棒的面試題,可以考察面試者的很多方面,比如基本功,代...

    qingshanli1988 評(píng)論0 收藏0
  • 好文 - 收藏集 - 掘金

    摘要:好吧,本文的主題可能還深入剖析的深復(fù)制前端掘金一年前我曾寫過一篇中的一種深復(fù)制實(shí)現(xiàn),當(dāng)時(shí)寫這篇文章的時(shí)候還比較稚嫩,有很多地方?jīng)]有考慮仔細(xì)。 翻譯 | 深入理解 CSS 時(shí)序函數(shù) - 前端 - 掘金作者:Nicolas(滬江前端開發(fā)工程師) 本文原創(chuàng),轉(zhuǎn)載請注明作者及出處。 各位,趕緊綁住自己并緊緊抓牢了,因?yàn)楫?dāng)你掌握了特別有趣但又復(fù)雜的CSS時(shí)序函數(shù)之后,你將會(huì)真正體驗(yàn)到豎起頭發(fā)般的...

    fobnn 評(píng)論0 收藏0
  • 案例 - 收藏集 - 掘金

    摘要:同行這么做使用實(shí)現(xiàn)圓形進(jìn)度條前端掘金在開發(fā)微信小程序的時(shí)候,遇到圓形進(jìn)度條的需求。實(shí)現(xiàn)也談數(shù)組去重前端掘金的數(shù)組去重是一個(gè)老生常談的話題了。百度前端技術(shù)學(xué)院自定義前端掘金一標(biāo)簽概念元素表示用戶界面中項(xiàng)目的標(biāo)題。 閑話圖片上傳 - 掘金作者:孫輝,美團(tuán)金融前端團(tuán)隊(duì)成員。15年畢業(yè)加入美團(tuán),相信技術(shù),更相信技術(shù)只是大千世界里知識(shí)的一種,個(gè)人博客: https://sunyuhui.com ...

    張金寶 評(píng)論0 收藏0
  • 案例 - 收藏集 - 掘金

    摘要:同行這么做使用實(shí)現(xiàn)圓形進(jìn)度條前端掘金在開發(fā)微信小程序的時(shí)候,遇到圓形進(jìn)度條的需求。實(shí)現(xiàn)也談數(shù)組去重前端掘金的數(shù)組去重是一個(gè)老生常談的話題了。百度前端技術(shù)學(xué)院自定義前端掘金一標(biāo)簽概念元素表示用戶界面中項(xiàng)目的標(biāo)題。 閑話圖片上傳 - 掘金作者:孫輝,美團(tuán)金融前端團(tuán)隊(duì)成員。15年畢業(yè)加入美團(tuán),相信技術(shù),更相信技術(shù)只是大千世界里知識(shí)的一種,個(gè)人博客: https://sunyuhui.com ...

    huangjinnan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<