整理js數組方法以及高階函數

1.數組填充 fill()

語法:array.fill(value, start, end)

value 必填:填充的值
start 選填:開始的位置
end 選填:結束位置
arr = [1,2,3,4,5];
arr.fill(0);
//[0, 0, 0, 0, 0]
arr.fill(1,1);
//(5) [0, 1, 1, 1, 1]
arr.fill(2,2,3);
//[0, 1, 2, 1, 1]
arr = new Array(5).fill(0);
//[0, 0, 0, 0, 0]

2.數組合並 concat()

語法:array.concat(arr1,arr2,…)

參數選填,不填參數則進行數組複製操作
arr1 = [1,2,3]
arr2 = [3,4,6]
arr3 = arr1.concat(arr2);//[1, 2, 3, 3, 4, 6]
arr1 = [1,2,3]
arr2 = [3,4,6]
arr3 = [];
arr3 = arr3.concat(arr1, arr2);//[1, 2, 3, 3, 4, 6]  

在es6中,還可以使用拓展運算符進行數組合並

arr1 = [1,2,3]
arr2 = [3,4,6]
arr3 = [...arr1, ...arr2]//[1, 2, 3, 3, 4, 6]

3.from()

Array.from可以將兩類對象轉爲真正的數組:擁有 length 屬性的對象或可迭代的對象

語法:Array.from(object, mapFunction, thisValue)

object 必需,要轉換爲數組的對象。
mapFunction 對每個元素的操作
thisValue 可選,映射函數(mapFunction)中的 this 對象。
temp = {
	'0': 1,
	'1': 2,
	'2': 3,
	length: 3,
}
arr = Array.from(temp);//[1, 2, 3]
arr = Array.from(temp, item=>item*10);//[10, 20, 30]
arr = Array.from('hello');//["h", "e", "l", "l", "o"]

如果參數是一個數組,那麼Array.from會返回一個一模一樣的新數組。

arr = Array.from([1,2,3]);//[1, 2, 3]

4.entries(),keys(),values()

entries() 方法返回一個數組的迭代對象,該對象包含數組的鍵值對 (key/value)。可用於for of操作。
entries()是對鍵值對的遍歷、keys()是對鍵名的遍歷、values()是對鍵值的遍歷。

arr = [1,2,3]
for(let key of arr.keys()){
	console.log(key)// 0 1 2
}
for(let value of arr.values()){
	console.log(key)// 1 2 3
}
for(let (key,value) of arr.entries()){
	console.log(key, value)// [0,1]  [1,2]  [2,3]
}

還可以用手動調用next()的方式實現遍歷

arr = [1,2,3]
a = arr.entries();
a.next().value;// [0, 1]
a.next().value;// [1, 2]
a.next().value;// [2, 3]

5.join()

將數組元素轉換爲一個字符串
語法:array.join(separator)

指定要使用的分隔符。默認使用逗號作爲分隔符。
arr = [1,2,3]
arr.join()//"1,2,3"
arr.join('')//"123"

6.數組的添加刪除

  • pop() 刪除最後一個元素,影響原數組
arr = [1,2,3]
arr.pop()//返回刪除的值,3
arr//[1,2]
  • push() 在最後添加一個或者多個元素,影響原數組
arr = [1,2,3]
arr.push(4)//返回新的長度,4
arr//[1,2,3,4]
arr.push(5,6)
arr//[1,2,3,4,5,6]
arr.push([7])
arr//[1,2,3,4,5,6,[7]]
  • shift() 刪除第一個元素,影響原數組
arr = [1,2,3]
arr.shift()//返回刪除的值,1
arr//[2,3]
  • unshift() 在最前添加一個或者多個元素,影響原數組
arr = [2,3]
arr.unshift(1,2)//返回新的長度,4
arr//[1,2,2,3]
  • slice(start, end) 截取數組的一部分,不影響原數組
start 截取開始的位置,包括 ,爲負數時 -1對應最後一個元素
end 截取結束的位置,不包括,默認到數組結束
arr = [1,2,3,4,5]
arr.slice(1,3)//[2,3]
arr//[1,2,3,4,5]
arr.slice(-2)//[4,5]
arr//[1,2,3,4,5]
  • splice(start, num, item1,item2,…) 刪除或者替換區域內元素,影響原數組
start 開始的位置
num 刪除的個數,默認到數組結束
item 新增的元素
arr = [1,2,3,4,5]
arr.splice(1,2)//[2,3]
arr//[1,4,5]

arr = [1,2,3,4,5]
arr.splice(1,2,'item1', 'item2', 'item3')//[2,3]
arr//[1, "item1", "item2", "item3", 4, 5]

7.map()

對數組中每個元素進行處理,然後返回一個新的數組,不影響原數組。
需要注意的是,map不會對空數組進行檢測

語法:array.map(function(currentValue,index,arr), thisValue)

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3]
arr.map(item=>item*10)//[10, 20, 30]
//上面的寫法等價於
arr.map(function(item){
	return item*10
})//[10, 20, 30]

arr//[1,2,3]

8.reduce(),reduceRight()

從數組開始操作到數組結束。返回一個值,不影響原數組
語法:array.reduce(function(total,currentValue,index,arr), initialValue)

total 初始值或計算之後返回的值
currentValue 當前值
index 當前索引
arr 原數組
initialValue 傳遞給函數初始值的值

reduce()是從左往右計算,reduceRight()是從右往左計算。

arr = [1,2,3]
arr.reduce((x,y)=>x+y)//6

reduce()會把結果繼續和下一個元素做累積計算。上一次運算的x+y會放在x中進行下一次運算,直至結束。
reduce()不會對空數組進行操作

arr = []
a = arr.reduce((x,y)=>x+y)//error: Reduce of empty array with no initial value

9.filter()

對內容進行過濾。不影響原數組

語法:array.filter(function(currentValue,index,arr), thisValue)

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3,4,5];
//獲取所有奇數,關於邏輯與或的知識請自行百度
arr.filter(item=>item&1)//[1,3,5]

arr = ['hello','world','good','nice','csdn'];
arr.filter(item=>item.length>4)//["hello", "world"]

10.every()

所有元素爲真則爲真。不影響原數組
語法:array.every(function(currentValue,index,arr), thisValue)

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3,4,5];
arr.every(item=>item>1)//false
arr.every(item=>item<6)//true

11.some()

有一個元素爲真則爲真,所有爲假則爲假。不影響原數組

語法:array.some(function(currentValue,index,arr), thisValue)

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3,4,5];
arr.some(item=>item>4)//true
arr.some(item=>item<1)//false

12.sort()

對數組進行排序處理。默認根據ASCII碼進行排序。如果帶參數,參數必須爲函數。影響原數組

arr = [10, 1, 20, 2];
arr.sort();//[1, 10, 2, 20]
//sort()方法默認把所有元素先轉換爲String再排序,
//因爲字符'1'比字符'2'的ASCII碼小,所以'10'排在了'2'的前面

arr.sort((x, y )=>{return x>y?1:-1});//[1, 2, 10, 20]

arr = ['array','Array', 'sort', 'Sort'];
arr.sort()//["Array", "Sort", "array", "sort"]
//大寫的英文字符的ASCLL碼小於小寫的英文字符的ASCLL碼

arr.sort((x, y )=>{
	x = x.toUpperCase();
	y = y.toUpperCase();
	return x>y?1:-1
});
//["Array", "array", "Sort", "sort"]

13.find(), findIndex(), indexOf(), lastIndexOf()

  • find(function(currentValue, index, arr),thisValue)

返回查詢的第一個元素(之後的元素將不會再調用函數)、不會對空數組進行操作、如果沒有符合條件的返回undefined、不影響原數組

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3,4]
arr.find(item=>item===2)//2
arr.find(item=>item===5)//undefined
  • findIndex(function(currentValue, index, arr),thisValue)

返回查詢的第一個元素的索引(之後的元素將不會再調用函數)、不會對空數組進行操作、如果沒有符合條件的返回-1、不影響原數組

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3,4]
arr.findIndex(item=>item===2)//1
arr.findIndex(item=>item===5)//-1
  • indexOf(item, start)

返回 item 的第一次出現的位置,沒有則返回-1。

item 查找的元素
start 開始檢索的位置,有效值0至length-1,默認從開始到結束
arr = [1,2,2,3,4]
arr.indexOf(2)//1,只返回第一次出現的下標
arr.indexOf(2, 3)//-1,從3下標開始檢索,沒有元素2,所以返回-1
  • lastIndexOf(item, start)

返回 item 的最後一次出現的位置(即從後往前的第一個),沒有則返回-1。與indexOf()的區別僅僅在於方向不同。

item 查找的元素
start 開始檢索的位置,有效值0至length-1,默認從最後一個元素開始
arr = [1,2,2,3,4]
arr.lastIndexOf(2)//2 ,只返回第一次出現的下標(從後往前的第一個)
arr.lastIndexOf(2, 1)//1,從1下標開始向前檢索
arr.lastIndexOf(2, 0)//-1,從0下標開始向前檢索

14.forEach()

語法:forEach(function(currentValue, index, arr),thisValue)

遍歷數組、不會對空數組進行操作.

currentValue 當前值
index 當前索引
arr 原數組
thisValue this的指向,默認爲全局對象
arr = [1,2,3,4]
sum = 0
arr.forEach(item=>sum+=item)
sum//10
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章