JavaScript數組方法--concat、push


利用了兩天的時間,使用typescript和原生js重構了一下JavaScript中數組對象的主要方法,可以移步github查看。

這里,按照MDN上的文檔順序,再重新學習一下數組方法吧。

  • concat: concat() 方法用於合並兩個或多個數組。此方法不會更改現有數組,而是返回一個新數組。
    給出的示例是:
    var array1 = ['a', 'b', 'c'];
    var array2 = ['d', 'e', 'f'];
    
    console.log(array1.concat(array2));
    

      期望輸出:["a", "b", "c", "d", "e", "f"]。這也符合我們正常的使用方式。那么還有沒有特殊的地方呢?
    1、由於concat()方法返回一個新數組,那么如果不傳參數,會怎樣呢?

    var array1 = ['a', 'b', 'c'];
    var arr3 = array1.concat()
    console.log(array1==arr3);   // false
    

      很明顯,可以實現數組的淺拷貝。
    2、如果參數不是數組呢?

    var array1 = ['a', 'b', 'c'];
    var arr3 = array1.concat("3", true, null, undefined, {key: "value"})
    console.log(arr3); 
    

      輸出結果:

    把所有參數都當做數組元素拼接到array1后面,並返回一個新的數組實例。
    想到了什么?這種情況是不是與push方法很像。區別在於push是修改原數組,concat是返回新數組。
    到這里,我們是不是可以嘗試重構一下concat的方法呢?

    function concat() {
      if (!(arguments[0] instanceof Array)) throw new Error("請確保第一個參數類型為數組")
      var results = []
      for (var i = 0; i < arguments.length; i++) {
        if (!(arguments[i] instanceof Array)) {
          results[results.length] = arguments[i]
          break;
        }
        for (var j = 0; j < arguments[i].length; j++) {
          results[results.length] = arguments[i][j]
        }
      }
      return results
    }
    

      稍作解釋的是,沒有在數組原型上重構各種方法,僅僅是封裝為一個個的函數,所以函數的第一個參數,都要求是需要操作的數組。

  • push:push() 方法將一個或多個元素添加到數組的末尾,並返回該數組的新長度。
    按照順序而言,這里不應該是push的,但是既然在談concat的時候,提到push了,那么就先來push吧!
    慣例,先看MDN給出的示例:

    var animals = ['pigs', 'goats', 'sheep'];
    
    console.log(animals.push('cows'));
    // expected output: 4
    
    console.log(animals);
    // expected output: Array ["pigs", "goats", "sheep", "cows"]
    
    animals.push('chickens');
    
    console.log(animals);
    // expected output: Array ["pigs", "goats", "sheep", "cows", "chickens"]
    

     看結果:

    很容易理解,push修改的是原數組,並返回修改后的數組長度。
    同理,我們分別測試:
    1、不傳參數

    var animals = ['pigs', 'goats', 'sheep'];
    var b = animals.push()
    console.log(b );  

    輸出值為3,那么3是哪里來的呢?很明顯就是animals.length,突然美滋滋的,下次再獲取數組長度,是不是可以裝X一下!!!
    2、傳遞多個不同類型的參數

    var animals = [];
    animals.push(['dogs', []],"3", true, null, undefined, {key: "value"})
    console.log(animals);
    

      查看結果:

    就是說不管什么類型的參數,一個參數都將作為一個元素,插入到原數組當中。
    那就重構一下push吧!第一個參數也是需要操作的數組!

    function push(arr) {
      if (!(arr instanceof Array)) throw new Error("請確保參數類型為數組")
      for (var i = 1; i < arguments.length; i++) {
        arr[arr.length] = arguments[i]
      }
      return arr.length
    }
    

     
    剩余的方法,期待后續了!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM