JavaScript高級函數 1.map/reduce map() map()是array的一個方法 作用: 對array中每一個元素調用自定義函數 map的回調函數有三個參數: callback(currentValue, index, array) 通常只要第一個參數 PS: map()傳入的參 ...
JavaScript高級函數
1.map/reduce
map()
map()是array的一個方法
作用: 對array中每一個元素調用自定義函數
'use strict';
function pow(x){
return x*x;
}
var arr=[1,2,3,4,5]
var newarray=arr.map(pow)
map的回調函數有三個參數:
callback(currentValue, index, array)通常只要第一個參數
PS: map()傳入的參數是pow,即函數對象本身
通常map調用的自定義方法只包含一個參數
reduce()
reduce()也是array的一個方法
作用: 從數組的前兩個元素開始,作為函數參數,傳入函數得到結果,
結果再和下一個數組元素再一次調用函數,直到數組盡頭
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
PS: 通常reduce()調用的自定義方法只包含兩個個參數
2.filter(篩選)
作用:把Array
的某些元素過濾掉,然後返回剩下的元素.
和map()
類似,Array
的filter()
也接收一個函數。和map()
不同的是,filter()
把傳入的函數依次作用於每個元素,然後根據返回值是true
還是false
決定保留還是丟棄該元素。
//去掉空字元串
var arr = ['A', '', 'B', null, undefined, 'C', ' '];
var r = arr.filter(function (s) {
return s && s.trim(); // 註意:IE9以下的版本沒有trim()方法
});
r; // ['A', 'B', 'C']
回調函數
通常我們僅使用第一個參數,表示Array
的某個元素。回調函數還可以接收另外兩個參數,表示元素的位置和數組本身:
var arr = ['A', 'B', 'C'];
var r = arr.filter(function (element, index, self) {
console.log(element); // 依次列印'A', 'B', 'C'
console.log(index); // 依次列印0, 1, 2
console.log(self); // self就是變數arr
return true;
});
篩選素數:
function get_primes(arr){
if(elem===1){
return false;
}
for(var i=2;i<=elem/2;i++){
if(elem%i==0)
{
return false;
}
}
return true;
});
return x;
}
PS: 關鍵在於正確實現一個“篩選”函數
3.sort(排序)
預設排序會把所有元素轉成String在排序,根據一個元素的ASCII值進行排序(非遞減)(TimSort演算法)
兩兩比較,當回調函數返回值大於0時,交換元素值
自定義數字排序
'use strict'
var arr=[10,20,1,2];
arr.sort(function(x,y){
if (x < y) {
return -1;
}
if (x > y) {
return 1;
}
return 0;
});
console.log(arr); // [1, 2, 10, 20]
數字倒序排列
var arr = [10, 20, 1, 2];
arr.sort(function (x, y) {
if (x < y) {
return 1;
}
if (x > y) {
return -1;
}
return 0;
}); // [20, 10, 2, 1]
4.其他的Array方法
every()和some()
作用: 可以判斷數組的所有元素是否滿足測試條件(通過函數提供)
every()是全部滿足的時候返回true,一個不滿足返回false,並終止檢測
some()是全部不滿足的時候返回false,有一個滿足就返回true
find()
作用: 查找第一個符合條件的元素
查找符合條件的第一個元素,如果找到了就返回這個元素,否則,返回undefined
findindex()
作用: 查找第一個符合條件的元素的索引
查找符合條件的第一個元素,找到這個元素就返回他的索引,如果沒有找到就返回-1
forEach()
作用: 常用於遍曆數組
(和map類似)把數組每個元素依次傳入函數,但不會返回新的數組.