十一、高階函式:filter、map、reduce
阿新 • • 發佈:2022-04-07
/** *程式設計正規化:指令式程式設計/宣告式程式設計 *程式設計正規化:面向物件程式設計(第一公民:物件)/函數語言程式設計(第一公民:函式) **/ // const nums= [10,20,30,50,111,222,333,40,50]; // //1. 需求:取出所有小於100的數字 // let newNums = []; // for(let n of nums){ // if(n<100){ // newNums.push(n); // } // } // //2. 將所有小於100的數字進行轉化:全部*2 // let new2Nums = []; // for(let n of new2Nums){ // if(n<100){ // newNums.push(n*2); // } // } // console.log(new2Nums); // //將所有的數字相加,得到最終結果 // let total = 0; // for(let n of new2Nums){ // total +=n; // } // console.log(total); //高階函式:filter、map、reduce /** * filter中的回撥函式有一個要求:必須返回一個boolean值 * true:當返回 true 時,函式內部會自動將這次回撥的 n 加入到新的陣列中 * false:當返回false時,函式內部會過濾掉這次的n * */ //結果:10 20 40 50 const nums = [10,20,111,222,444,40,50]; let newNums = nums.filter(function(n){ return n < 100 }); console.log(newNums); /** * map函式的使用 * */ //結果:20 40 80 100 let nuew2Nums = newNums.map(function(n){ return n * 2; }); console.log(nuew2Nums); /** * reduce函式的使用 * 作用:對陣列中的所有內容進行彙總 * preValue引數:記錄上次返回的結果的值 **/ // 第1次:preValue=0 n=20 // 第2次:preValue=20 n=40 // 第3次:preValue=60 n=80 // 第4次:preValue=140 n=100 // 結果:240 let totel = nuew2Nums.reduce(function(preValue, n){ return preValue + n; },0); console.log(totel); // 寫法二 let total = nums.filter(function(n){ return n < 100; }).map(function(n){ return n * 2; }).reduce(function(preValue, n){ return preValue + n; },0); console.log(total); // 寫法三 let total1 = nums.filter(n => n < 100) .map(n => n * 2) .reduce((pre,n)=> pre + n); console.log(total1);