91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

js中怎么復制一個數組

發布時間:2023-04-13 16:35:37 來源:億速云 閱讀:124 作者:iii 欄目:開發技術

這篇“js中怎么復制一個數組”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“js中怎么復制一個數組”文章吧。

    在js中,我們經常會用到數組復制,Array是引用類型,如果用arrA=arrB簡單的把一個數組賦值,并沒有創造出一個新數組,arrA和arrB其實指向的還是同一個地址,改變一個另一個也會隨之改變,很明顯這并不是我們想要的

      var arr = [1, 2, 3];
      var newArr = arr;
      arr.push(4);
      console.log(newArr1);  // [1, 2, 3, 4]

    下面介紹數組的淺復制

    (適用于數組并不復雜,即數組中沒有嵌套對象或者嵌套數組)

    方法一:concat()

    • concat()方法用于連接兩個或多個數組;

    • concat() 方法不會更改現有數組,而是返回一個新數組,其中包含已連接數組的值。

      var arr = [1, 2, 3];
      var newArr = arr.concat();
      arr.push(4);
      console.log(newArr); // [1, 2, 3]

    方法二:slice()

    • slice() 方法以新的數組對象,返回數組中被選中的元素;

    • slice() 方法選擇從給定的 start 參數開始的元素,并在給定的 end 參數處結束,但不包括;

    • slice() 方法不會改變原始數組;

      var arr = [1, 2, 3];
      var newArr = arr.slice();
      arr[0] = 10;
      console.log(arr);// [10, 2, 3]
      console.log(newArr);// [1, 2, 3]

    方法三:擴展運算符

      var arr = [1, 2, 3];
      var [ ...newArr ] = arr;
      arr[0] = 10;
      console.log(arr); // [10, 2, 3]
      console.log(newArr);// [1, 2, 3]

    方法四: Object.assign()

     var arr = [1, 2, 3];
     var newArr = Object.assign([], arr);
     arr[0] = 10;
     console.log(arr);// [10, 2, 3]
     console.log(newArr);// [1, 2, 3]

    如果數組元素是對象或者數組,上面四種方法就會只拷貝數組或者對象的引用,如果我們對其中一個數組進行修改,另一個數組也會發生變化

    比如:

      var arr = [ { a: 1 }, [ 1, 2 ], 3 ];
      let newArr = arr.concat();
      arr[0].a = 2;
      console.log(arr); // [ { a: 2 }, [ 1, 2 ], 3 ]
      console.log(newArr);// [ { a: 2 }, [ 1, 2 ], 3 ] 值被影響

    下面是深復制

    (可以完全拷貝一個數組,即使嵌套了對象或者數組,兩者也不會互相影響)

    方法一:JSON.parse(JSON.stringify(arr))

      var arr = [ { a: 1 }, [ 1, 2 ], 3 ];
      // let newArr = JSON.parse(JSON.stringify(arr));
      let newArr = arr.concat();
      arr[0].a = 2;
      console.log(arr); // [ { a: 2 }, [ 1, 2 ], 3 ]
      console.log(newArr);// [ { a: 1 }, [ 1, 2 ], 3 ]

    但是該方法是有局限性的

    • 會忽略 undefined

    • 會忽略 symbol

    • 不能序列化函數

    • 不能解決循環引用的對象

    比如下面這個例子:

    let a = {
      age: undefined,
      sex: Symbol('male'),
      jobs: function() {},
      name: 'sun'
    }
    let b = JSON.parse(JSON.stringify(a))
    console.log(b) // {name: "sun"}

    方法二:通用方法(數組或對象)

    拷貝的時候判斷屬性值的類型,如果是對象,繼續遞歸調用深拷貝函數(簡易版)

      var deepCopy = function(obj) {
        // 判斷是否是對象
        if (typeof obj !== 'object') return;
        // 判斷obj類型,根據類型新建一個對象或者數組
        var newObj = obj instanceof Array ? [] : {}
        // 遍歷對象,進行賦值
        for (var key in obj) {
          if (obj.hasOwnProperty(key)) {
            let val = obj[key];
            // 判斷屬性值的類型,如果是對象,遞歸調用deepCopy
            newObj[key] = typeof val === 'object' ? deepCopy(val) : val
          }
        }
        return newObj
      }

    方法三:利用lodash的深拷貝函數

    _.cloneDeep(value)

    其中value就是要深拷貝的值

    簡單例子

    var objects = [{ 'a': 1 }, { 'b': 2 }];
    var deep = _.cloneDeep(objects);
    console.log(deep[0] === objects[0]);
    // => false

    在Vue中使用

    安裝

    npm i --save lodash

    在main.js中引入

    import _ from 'lodash';
    Vue.prototype._ = _;

    使用

    let newObj = this._.cloneDeep(oldObj)

    以上就是關于“js中怎么復制一個數組”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    js
    AI

    陆丰市| 常山县| 白山市| 突泉县| 巴塘县| 潼关县| 佛冈县| 蓬莱市| 额济纳旗| 澎湖县| 精河县| 老河口市| 阳新县| 桦川县| 株洲市| 张掖市| 扬州市| 临桂县| 砚山县| 岫岩| 磴口县| 江山市| 修武县| 抚州市| 桂阳县| 诸城市| 汝城县| 芦溪县| 东阿县| 大洼县| 顺义区| 日喀则市| 柳州市| 淮安市| 贺兰县| 那曲县| 贵溪市| 中宁县| 湖口县| 城市| 肥西县|