<em id="09ttv"></em>
    <sup id="09ttv"><pre id="09ttv"></pre></sup>
    <dd id="09ttv"></dd>

        • js reduce()

          2019-11-1    seo達人

          是什么

          ES5提供的數組的方法。

          reduce() 方法接收一個函數作為回調函數(accumulator),數組中的每個值(從左到右)開始縮減(其實就是從左往右開始對每個數執行回調函數),最終為一個值。



          PS: 回調函數的返回結果類型和傳入的初始值相同



          語法以及參數

          arr.reduce(  callback(accumulator, currentValue,index ,array ) ,initialValue )

          1

          initialValue 可選

          如果有的話則作為,第一次調用 callback函數時的第一個參數的值。

          如果沒有提供初始值,callback則使用數組的第一個元素,作為第一次調用的初始值。

          在沒有初始值的空數組上調用 reduce 將報錯。



          accumulator

          默認傳入上一次調用回調函數的的返回值。

          初始值: initialValue存在的話,則是initialValue 若沒有則是數組的第一個元素



          currentValue

          數組中正在處理的元素。



          index 可選

          數組中正在處理的當前元素的索引。 如果提供了initialValue,則起始索引號為0,否則從索引1起始。



          array可選

          調用reduce()的數組



          一個小小的例子

          例1 無initialValue

          var  arr = [1, 2, 3, 4, 5];

          sum = arr.reduce(function(result, cur, index, arr) {

              console.log(result, cur, index,arr);

              return result+ cur;

          })

          console.log(sum) // 最后的結果是15



          result cur index arr

          第1次 1 2 1 [1, 2, 3, 4, 5]

          第2次 3 3 2 [1, 2, 3, 4, 5]

          第3次 6 4 3 [1, 2, 3, 4, 5]

          第4次 10 5 4 [1, 2, 3, 4, 5]

          例2 有initialValue 傳入10

          var  arr = [1, 2, 3, 4, 5];

          sum = arr.reduce(function(result, cur, index, arr) {

              console.log(result, cur, index,arr);

              return result+ cur;

          },10)

          console.log(sum) // 最后的結果是25



          result cur index arr

          第1次 10 1 0 [1, 2, 3, 4, 5]

          第2次 11 2 1 [1, 2, 3, 4, 5]

          第3次 13 3 2 [1, 2, 3, 4, 5]

          第4次 16 4 3 [1, 2, 3, 4, 5]

          第5次 20 5 4 [1, 2, 3, 4, 5]

          回調函數的返回值

          上面的例子返回的都是一個整型數字,如果希望返回其他類型的數據呢?



          這個就跟accumulator的初始值有關系了。

          下面的例子我們傳入的是一個object {sum: 0}



          var items = [0,1,2,3,4];

          var reducer = function add(sumT, item) {

            console.log(sumT)

            sumT.sum = sumT.sum + item;

            return sumT;

          };

          var total = items.reduce(reducer, {sum: 0});

          console.log(total); // {sum:1130}



          運行結果



           {sum: 0}

           {sum: 1}

           {sum: 3}

           {sum: 6}

           {sum: 10}



          reduce()的應用

          1. 數組扁平化

            遞歸+reduce



            let arr = [1, 2, '3js', [4, 5, [6], [7, 8, [9, 10, 11], null, 'abc'], {age: 12}, [13, 14]], '[]'];



            function flatten(arr) {

              if(Array.isArray(arr)) {

                return arr.reduce((prev, cur) => {

                   // 如果遍歷的當前項是數組,遞歸調用flatten

                  return Array.isArray(cur) ? prev.concat(flatten(cur)) : prev.concat(cur)

                }, [])

              } else {

                throw new Error(' 當前參數不是數組')

              }

            }

            console.log(flatten(arr));



            PS:這里的throw new Error只是用來判斷一開始的arr,這是因為在遞歸只傳入數組。


          日歷

          鏈接

          個人資料

          藍藍設計的小編 http://m.sdgs6788.com

          存檔

          韩国三级大全久久网站| 亚洲狠狠综合久久| 国产成人无码精品久久久性色| 久久99久久99精品免视看动漫| 精品永久久福利一区二区| 久久久久噜噜噜亚洲熟女综合| 久久久久免费精品国产| 久久综合综合久久97色| 中文字幕久久精品无码| 99久久99久久精品国产| 亚洲精品tv久久久久久久久| 精品久久久久国产免费| 国产精品免费福利久久| 久久精品国产2020| 久久伊人五月天论坛| 久久久青草久久久青草| 日韩久久久久久中文人妻| 久久久久久久免费视频| 国内精品久久久久久久coent | 国内精品久久久久久中文字幕 | 中文精品久久久久国产网址| 一级a性色生活片久久无| 国产成人精品综合久久久| 久久不见久久见免费视频7| 久久久久久久精品成人热色戒| 99久久精品免费看国产一区二区三区| 97精品依人久久久大香线蕉97| 婷婷久久综合| 久久午夜福利电影| 欧美伊人久久大香线蕉综合69 | 国产L精品国产亚洲区久久 | 99久久免费国产精品特黄| 97久久精品人人澡人人爽 | 久久久久亚洲AV无码专区首JN| 精品久久久久久国产牛牛app| 99久久亚洲综合精品成人| 97精品国产97久久久久久免费 | 伊人色综合九久久天天蜜桃| 国产精品99久久久精品无码 | 久久午夜无码鲁丝片秋霞| 午夜精品久久久久久影视777 |