map()是array的一個方法javascript
做用: 對array中每個元素調用自定義函數java
'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()也是array的一個方法code
做用: 從數組的前兩個元素開始,做爲函數參數,傳入函數獲得結果,對象
結果再和下一個數組元素再一次調用函數,直到數組盡頭排序
[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
PS: 一般reduce()調用的自定義方法只包含兩個個參數索引
做用:把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: 關鍵在於正確實現一個「篩選」函數
默認排序會把全部元素轉成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]
做用: 能夠判斷數組的全部元素是否知足測試條件(經過函數提供)
every()是所有知足的時候返回true,一個不知足返回false,並終止檢測
some()是所有不知足的時候返回false,有一個知足就返回true
做用: 查找第一個符合條件的元素
查找符合條件的第一個元素,若是找到了就返回這個元素,不然,返回undefined
做用: 查找第一個符合條件的元素的索引
查找符合條件的第一個元素,找到這個元素就返回他的索引,若是沒有找到就返回-1
做用: 經常使用於遍歷數組
(和map相似)把數組每一個元素依次傳入函數,但不會返回新的數組.