之前寫了幾篇關于數組的筆記,很零散,是以現在想總結一下,比較完成總彙目錄吧!
- 數組的構造函數有幾種
- 哪些是改變數組自身的方法
- 哪些是不改變自身的方法
- 數組周遊有哪些方法
數組構造器
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可以接受三個參數:
- 類似數組并且可疊代的對象;
- 加工函數【可選】;
- 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
周遊數組的方法
類數組
數組扁平化
- 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)
}, [])
}
- 擴充運算符
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))
- split()和toString()
const arr00 = [1, [4, 4, [54, 65]]];
function flatArr(arr) {
retutn arr.toString().split(",")
}
console.log(flatArr(arr00))