數組方法是否為數組Array.isArray(param)如果param是 Array,則為true; 否則為false。數組轉字元串joinjoin(separator)以separator為分隔符,省略的話則用預設用逗號為分隔符可以實現重覆字元串,實質是在n+1個空字元串之間加入要重覆 ...
數組方法
- 是否為數組
- Array.isArray(param)
- 如果param是 Array,則為true; 否則為false。
- 數組轉字元串
- join
- join(separator)
- 以separator為分隔符,省略的話則用預設用逗號為分隔符
- 可以實現重覆字元串,實質是在n+1個空字元串之間加入要重覆的字元串
function repeatString(str, n) {
return new Array(n + 1).join(str)
}
console.log(repeatString("abc", 3)) // abcabcabc - 不影響原數組
- join
- 增刪改數組
- splice(start,length[,params])
- 刪除:
- 參數:要刪除的第一項的位置和要刪除的項數。
- 例如, splice(0,2)會刪除數組中的前兩項。
- 插入:
- 參數:起始位置、 0(要刪除的項數)和要插入的項。
- 例如,splice(2,0,4,6)會從當前數組的位置 2 開始插入4和6。
- 替換:
- 參數:起始位置、要刪除的項數和要插入的任意數量的項。
- 插入的項數不必與刪除的項數相等。
- 例如,splice (2,1,4,6)會刪除當前數組位置 2 的項,然後再從位置 2 開始插入4和6。
- 返回值為一個數組,該數組中包含從原始數組中刪除的項,如果沒有刪除任何項,則返回一個空數組。
- 刪除:
- push()
- 接收任意數量的參數,將它們逐個添加到數組尾部
- 返回值是修改後的數組長度
- pop()
- 數組尾部移除最後一項
- 返回值是被移除的項
- shift()
- 移除數組第一項
- 返回值為被移除的項
- 數組為空則返回undefined
- unshift()
- 接收任意數量的參數,將他們添加到數組頭部
- 返回值是修改後的數組長度
- 對比push和unshift多參數情況
可以把參數看做一個整體,按原有順序放到數組的頭(尾)部- push
- let arr = [4,5,6]
- arr.push(7,8,9) // arr=[4,5,6,7,8,9]
- unshift
- let arr =[4,5,6]
- arr.unshift(1,2,3) // arr=[1,2,3,4,5,6]
- push
- splice(start,length[,params])
- 數組排序
- sort()
- sort()方法會調用每個數組項的 toString()轉型方法,然後比較得到的字元串,以確定如何排序。
- 即使數組中的每一項都是數值, sort()方法比較的也是字元串。
var arr1 = ["a", "d", "c", "b"];
console.log(arr1.sort()); // ["a", "b", "c", "d"]
arr2 = [13, 24, 51, 3];
console.log(arr2.sort()); // [13, 24, 3, 51] (這裡轉換成字元串作比較,所以相當於每個字元串的第一位進行比較,即[1,2,5,3]。排序後變成[1,2,3,5],即[13,24,3,51],所以個位數比較不會出現這種問題)
console.log(arr2); // [13, 24, 3, 51] (原數組被改變) - sort()方法可以接收一個比較函數作為參數,以便我們指定哪個值位於哪個值的前面。比較函數接收兩個參數,如果第一個參數應該位於第二個之前則返回一個負數,如果兩個參數相等則返回0,如果第一個參數應該位於第二個之後則返回一個正數。
升序:
arr.sort(function(a,b){
return a-b
})
降序:
arr.sort(function(a,b){
return b-a
})
- reverse()
- 反轉數組項的順序。
- sort()
- 數組拼接
- concat()
- 將參數添加到原數組中。
- 這個方法會先創建當前數組一個副本,然後將接收到的參數添加到這個副本的末尾,最後返回新構建的數組。
- 在沒有給 concat()方法傳遞參數的情況下,它只是複製當前數組並返回副本。
- 傳入的不是數組,則直接把參數添加到數組後面,如果傳入的是數組,則將數組中的各個項添加到數組中。
- 不影響原數組
- concat()
- 數組切割
- slice(start[,end])
- 返回從原數組中指定開始下標到結束下標之間的項組成的新數組,但不包括結束位置的項。
- 在只有一個參數的情況下, slice()方法返回從該參數指定位置開始到當前數組末尾的所有項。
- 不影響原數組
- slice(start[,end])
- 數組搜索
- indexOf()和 lastIndexOf()
- 參數:要查找的項和(可選的)表示查找起點位置的索引。可以是負數,它代表相對於數組末尾的個數。最後一個元素是-1,倒數第二個元素為-2,以此類推...
- 參數為NaN時返回-1,所以不能搜索數組中的NaN。
- 這兩個方法都返回要查找的項在數組中的位置,或者在沒找到的情況下返回-1。
- 比較參數和數組項時,會使用全等操作符。
- 不影響原數組
- find()和findIndex() (es6)
- 在數組內部, 找到第一個符合條件的數組成員。
arr.find((value, index, arr) => {
return value > 4
})
value:每一次迭代查找的數組元素。
index:每一次迭代查找的數組元素索引。
arr:被查找的數組。 - find()函數,找到就返回該元素,找不到返回undefined。
- findIndex()函數,找到就返回元素的位置,找不到就返回-1。
- 可以搜索NaN的位置。
arr.findIndex((value)=>{
return Object.is(NaN,value)
}) - 不影響原數組
- 在數組內部, 找到第一個符合條件的數組成員。
- includes() (es7)
- 表示某個數組是否包含給定的值,與字元串的includes()方法類似
- 第一個參數表示要查找的數,第二個參數表示搜索的起始位置,返回一個布爾值。
- 推薦使用這個而不是indexOf()因為後者會對NaN造成誤判。
arr.includes(NaN) - 不影響原數組
- indexOf()和 lastIndexOf()
- 數組歸併
- reduce()和 reduceRight()
- 參數:每一項上調用的函數和(可選的)作為歸併基礎的初始值。
- 回調函數參數:前一個值、當前值、項的索引和數組對象。
- reduce()從數組的第一項開始,逐個遍歷到最後。
- reduceRight()從數組的最後一項開始,向前遍歷到第一項。
- 空數組上,不帶初始值參數調用將會報錯。
- 如果只有一個元素且沒有指定初始值,或者空數組指定了一個初始值,reduce()只是簡單地返回那個值而不會調用化簡函數
- 函數返回的任何值都會作為第一個參數自動傳給下一項。
- 數組求和(數組一開始加了一個初始值10)。
arr.reduceRight(function(prev, cur, index, array){
return prev + cur;
},10) - 不影響原數組
- reduce()和 reduceRight()
- 數組迭代
- 都不影響原數組
- forEach()
- 對數組中的每一項運行給定函數。
- 函數參數:元素,索引,數組本身。
- 沒有返回值
- map()
- 返回每次函數調用的結果組成的數組。
- filter()
- 返回滿足過濾條件組成的數組。
- every()
- 判斷數組中每一項都是否滿足條件。
- 只有所有項都滿足條件,才會返回true。
- 若有一個參數為false,則返回,忽略執行後面的參數。
- some()
- 判斷數組中是否存在滿足條件的項。
- 只要有一項滿足條件,就會返回true。
- 若有一個參數為true, 則返回, 忽略執行後面的參數。
- 數組成員複製
- copyWithin() (es6)
- 在數組內部,將指定位置的成員複製到其他位置(會覆蓋原有成員)。
- 參數:
- target(必須): 從該位置開始替換數據;
- start(可選):從該位置開始讀取原數組數據;
- end(可選):複製到該位置的前一個位置截止。
- [1, 2, 3, 4, 5, 6].copyWithin(2) // [1, 2, 1, 2, 3, 4]
- [1, 2, 3, 4, 5, 6].copyWithin(2,1) // [1, 2, 2, 3, 4, 5]
- [1, 2, 3, 4, 5, 6].copyWithin(2,1,4) // [1, 2, 2, 3, 4, 6]
- copyWithin() (es6)
- 數組填充
- fill(value[,start[,end]]) (es6)
- 將一個固定值替換數組的元素(會覆蓋原有成員)。
- value必需。填充的值。
- start可選。開始填充位置。
- end可選。停止填充位置 (預設為 array.length),填充至指定位置前一個。
- [a,b,c,d].fill('e') // [e,e,e,e]
- [a,b,c,d].fill('e',2) // [a,b,e,e]
- [a,b,c,d].fill('e',2,3) // [a,b,e,d]
- fill(value[,start[,end]]) (es6)
- 其他值轉化成數組
- Array.from(arrayLike[, mapFn[, thisArg]]) (es6)
- 將部署了Iterator介面的對象,比如:Set,Map,Array;和類數組對象轉換成數組。類數組對象,就是一個對象必須有length屬性,沒有length,轉出來的就是空數組。
- arrayLike:被轉換的的對象。
- mapFn:map函數。用來對每個元素進行處理,將處理後的值放入返回的數組。
- thisArg:map函數中this指向的對象。
- 相容寫法
if (!Array.from) {
Array.from = function(obj) {
return [].slice.call(obj)
}
}
- Array.of()
- 將一組值轉化為數組。
- 參數:無或無限(無時返回一個空數組)。
- 相容寫法
if (!Array.of) {
Array.of = function() {
return Array.prototype.slice.call(arguments)
}
}
- Array.from(arrayLike[, mapFn[, thisArg]]) (es6)