javascript中陣列的常用高階函式
什麼是高階函式?
高階函式的定義:如果一個函式操作其他函式,即將其他函式作為引數或將
函式作為返回值,則稱這個函式是一個高階函式。javascript的陣列中有常用哪些高階陣列?
函式的作用 | 函式名 | 描述 |
遍歷 | forEach | 接收一個操作當前元素的函式,從而完成遍歷中重複的操作,此函式沒有返回值(注:可參考下列模擬原始碼來分析為什麼沒有返回值,因為即使傳遞一個有返回值的函式當引數,每次操作中產生的返回值也只是引數函式的返回值,不是forEach函式的返回值) |
過濾 | filter | 接收一個判斷每個元素是否符合過濾條件的函式,從而過濾出符合條件的元素(注:類似SQL語句中的where子句) |
對映 | map | 接收一個返回指定對映屬性的值的函式(注:類似SQL語句中的select語句) |
聚合彙總 | reduce | 接收兩個引數,第一個引數是描述資料聚合策略的函式(該函式必需有兩個引數,第一個是彙總變數,第二個是遍歷時的當前值),第二個引數值是統計變數的初始值(注:返回的結果是一個獨立的值) |
//陣列中的高階函式 forEach console.log("------------陣列中的高階函式 forEach------------"); function forEach(array,action){ for(var i=0; i<array.length; i++) action(array[i]); } var strs=["tom","zack","leo"]; //forEach(strs,console.log); var numbers=[0,1,2,3,4,5,6,7,8,9],sum=0; //forEach(numbers,function(number){sum += number;}); //console.log(sum); numbers.forEach(function(number){sum += number;}); console.log(sum); //numbers.forEach(console.log); //JSON test console.log("------------JSON test------------"); var obj = { "name":"lili", "sex":"female", "age":18 }; var jsonStr = JSON.stringify(obj); console.log(jsonStr); var jsonObj = JSON.parse(jsonStr); console.log(jsonObj); //陣列中的高階函式 filter console.log("------------陣列中的高階函式 filter------------"); var persons = [ {"name":"lili", "sex":"female", "age":18}, {"name":"zack", "sex":"male", "age":20}, {"name":"ruby", "sex":"female", "age":24}, {"name":"leo", "sex":"male", "age":30}, {"name":"lucy", "sex":"female", "age":35}, ]; var passedBySex = persons.filter( function(person){ return person.sex=="male"; }); console.log(passedBySex); //陣列中的高階函式 map console.log("------------陣列中的高階函式 map------------"); var mapName = passedBySex.map( function(person){ return person.name; }); console.log("單項資料對映name:",mapName); var personsNameAndAge = persons.map( function(person){ return {"name":person.name,"age":person.age}; }); console.log("多項資料對映name和age:",personsNameAndAge); //陣列中的高階函式 reduce console.log("------------陣列中的高階函式 reduce------------"); var personsAge = persons.map(function(person){return person.age;}); var reduceAge = personsAge.reduce( function(a,b){ return a+b; }); console.log(reduceAge,persons[0].age+persons[1].age);
此外陣列中還有兩個標準方法,分別是every和some,every函式的作用類似於運算子&&,some函式的作用類似於||
var numbers = [11,12,13,14,22,23];
var test=numbers.every(function(num){
return num>10;
});
console.log(test);
test=numbers.some(function(num){
return num>16;
});
console.log(test);