天天看點

JavaScript最後一篇關于數組的總彙

之前寫了幾篇關于數組的筆記,很零散,是以現在想總結一下,比較完成總彙目錄吧!

  1. 數組的構造函數有幾種
  2. 哪些是改變數組自身的方法
  3. 哪些是不改變自身的方法
  4. 數組周遊有哪些方法

數組構造器

1. Array

Array用來建立一個新的數組,當然,我們也可以使用字面量的方式來定義數組,比如:

const  arr = []      

等價于

const  arr = Array()      

但是,如果我們要定義一個有長度的數組,例如數組長度為10,這樣使用字面量的方式定義新的數組就有點吃力了。

那麼直接使用Array()構造函數定義新的數組:

const arr = Array(10); // 定義長度為10的空數組      

當然在JavaScript中的數組的長度也不是無限大的,要小于2的32次方,即Math.pow(2,32)。如果數組的長度大于或者等于2的32次方,就會抛出RangeError的異常。

2.Array.of 和 Array.from

Array.of(),會依次把參數轉化為數組的一項,然後傳回該數組,和Array構造函數類似,隻是在處理單個參數的有點不一樣,Array.of()是直接把單個參數轉化為數組後傳回;而Array()是會把單個參數作為新數組的長度,數組的每一項都為空。

Array.from,是把類數組對象轉化為數組,不會修改原對象,隻傳回新數組。

Array.from可以接受三個參數:

  1. 類似數組并且可疊代的對象;
  2. 加工函數【可選】;
  3. this,表示加工函數執行時this的指向。

判斷一個變量是否為數組的幾種方式

var arr = [];

// 1.基于instanceof
arr instanceof Array;

// 2.基于constructor
arr.constructor === Array;

// 3.基于Object.prototype.isPrototypeOf
Array.prototype.isPrototypeOf(arr);

// 4.基于getPrototypeOf
Object.getPrototypeOf(arr) === Array.prototype;

// 5.基于Object.prototype.toString
Object.prototype.toString.apply(arr) === '[object Array]';
      

改變數組自身的方法

pop、push、reverse、shift、sort、splice、unshift、copyWithin 和 fill

不改變數組自身的方法

concat、join、slice、toString、toLocaleString、indexOf、lastIndexOf、includes

周遊數組的方法

類數組

數組扁平化

  1. reduce
const arr00 = [1, [4, 4, [54, 65]]];
function flatArr(arr) {
    return arr.reduce(function (prev, curr) {
        return prev.concat(Array.isArray(curr) ? flatArr(curr) : curr)
    }, [])
}      
  1. 擴充運算符
const arr00 = [1, [4, 4, [54, 65]]];
 function flatArr(arr) {
     while (arr.some(function (item) { return Array.isArray(item) })) {
         arr = [].concat(...arr)
     }
     return arr
 }

 console.log(flatArr(arr00))      
  1. split()和toString()
const arr00 = [1, [4, 4, [54, 65]]];
 function flatArr(arr) {
     retutn arr.toString().split(",")
 }

 console.log(flatArr(arr00))      

繼續閱讀