欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript中reduce()詳解及使用方法

 更新時間:2023年04月27日 10:19:01   作者:超快的慢蝸牛  
reduce()方法接收一個函數(shù)做為累加器,數(shù)組中的每一個值(從左到右)開始縮減,最終計算為一個值,下面這篇文章主要給大家介紹了關于JavaScript中reduce()詳解及使用方法的相關資料,需要的朋友可以參考下

reduce():

reduce()方法為歸并類方法,最常用的場景就是,計算數(shù)組中的每一項的總和。

reduce() 方法會遍歷數(shù)組的每一項,他接收兩個參數(shù):

第一個參數(shù):每次遍歷都會調用的函數(shù),而這個函數(shù)有接收四個參數(shù),分別是:前一個值、當前項、項目的索引和數(shù)組對象,而這個函數(shù)的返回值,回傳給下一次遍歷時,執(zhí)行的這個方法的第一個參數(shù)。

第二個參數(shù):歸并基礎的初始值

我們看一下例子: reduce()怎么用?

 let arr = [1,2,3,4,5]
 arr.reduce((prev,cur)=>{
      return prev+cur
 })

上面的這段代碼,是用來計算數(shù)組總和的,reduce()方法中,只傳了第一個參數(shù),也就是只傳了一個函數(shù),但第二個參數(shù)、初始值沒有傳,當?shù)诙€值沒有傳的時候,第一次循環(huán),prev的值,默認為數(shù)組的第一項,而cur的值為數(shù)組的第二項,也就是第一次循環(huán),會return 1+2,這個時候,第一次循環(huán)返回的結果回傳給下一次循環(huán)中方法的第一個參數(shù),也就是說、第二次循環(huán)方法中prev的值,是第一次循環(huán)方法返回的結果

let arr = [1,2,3,4,5]
arr.reduce((prev,cur)=>{
    return prev+cur
},10)

我們傳入一下第二個參數(shù),第一個循環(huán),prev的值為reduce的第二個參數(shù),也就是"歸并基礎的初始值",而cur的值為數(shù)組的第一項,第一項循環(huán)會返回10+1

總結:

1.當reduce()方法的第二個值為空時,第一次循環(huán)方法中的第一個參數(shù)(prev)為數(shù)組的第一項值,第二個參數(shù)(cur)為數(shù)組的第二項值,反之,第一次循環(huán)方法中的第一個參數(shù)(prev)為reduce的第二個參數(shù)值,第二個參數(shù)(cur)為數(shù)值的第一項值。

2.reduce()方法的第一個參數(shù),就是每次遍歷都會執(zhí)行的匿名函數(shù),當前函數(shù)的返回值就會傳給下一次執(zhí)行函數(shù)的第一個值。也就是prev

reduce 應用場景:

1.數(shù)組里所有值的和

      var arr = [0,1,2,3];
 
      var value = arr.reduce((pre, cur) => {
        return pre + cur;
      }, 0);
      
      console.log(value);// 輸出:6

2.累加數(shù)組中對象的值

      var arr = [{ x: 1 }, { x: 2 }, { x: 3 }];
 
      var value = arr.reduce((pre, cur) => {
        return pre + cur.x;
      }, 0);
      
      console.log(value);// 輸出:6

3.將二維數(shù)組轉為一維數(shù)組

      var arr = [
        [0, 1],
        [2, 3],
        [4, 5],
      ];
 
      var value = arr.reduce((pre, cur) => {
        return pre.concat(cur);
      }, []);
 
      console.log(value); // 輸出:[0, 1, 2, 3, 4, 5]

4.計算數(shù)組中每個元素出現(xiàn)的次數(shù)

      var arr = ["a", "b", "a", "c", "c", "c"];
 
      var value = arr.reduce((pre, cur) => {
        if (cur in pre) {
          pre[cur]++;
        } else {
          pre[cur] = 1;
        }
        return pre;
      }, {});
 
      console.log(value); // 輸出:{a: 2, b: 1, c: 3}

5.按屬性對object分類

      var people = [
        { name: "tom", age: 17, birthYear: 2021 },
        { name: "tony", age: 21, birthYear: 2021 },
        { name: "bob", age: 18, birthYear: 2020 },
        { name: "bob", age: 18, birthYear: 2021 },
        { name: "bob", age: 18, birthYear: 2019 },
      ];
 
      function groupBy(arr, property) {
        if (!Array.isArray(arr)) return [];
 
        return arr.reduce((pre, obj) => {
          var newObj = {
            [property]: obj[property],
            data: [obj],
          };
 
          if (!pre.length) {
            return [newObj];
          }
 
          for (let i = 0; i < pre.length; i++) {
            let item = pre[i];
            if (item[property] === obj[property]) {
              item.data = [...item.data, obj];
              return pre;
            }
          }
          return [...pre, newObj];
        }, []);
      }
 
      var value = groupBy(people, "birthYear");

返回值:

6.數(shù)組去重:

      var arr = [1, 2, 3, 2, 2, 3, 5, null, null, 0, false, false, true];
 
      var value = arr.reduce((pre, cur) => {
        return pre.includes(cur) ? pre : pre.concat(cur);
      }, []);
 
      console.log(value);//[1, 2, 3, 5, null, 0, false, true]

附:reduce的高級用法

(1)計算數(shù)組中每個元素出現(xiàn)的次數(shù)
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let nameNum = names.reduce((pre,cur)=>{
  if(cur in pre){
    pre[cur]++
  }else{
    pre[cur] = 1 
  }
  return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}


(2)數(shù)組去重
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
    if(!pre.includes(cur)){
      return pre.concat(cur)
    }else{
      return pre
    }
},[])
console.log(newArr);// [1, 2, 3, 4]

(3)將二維數(shù)組轉化為一維

let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
    return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]
(3)將多維數(shù)組轉化為一維

let arr = [[0, 1], [2, 3], [4,[5,6,7]]]
const newArr = function(arr){
   return arr.reduce((pre,cur)=>pre.concat(Array.isArray(cur)?newArr(cur):cur),[])
}
console.log(newArr(arr)); //[0, 1, 2, 3, 4, 5, 6, 7]

(4)、對象里的屬性求和
var result = [
    {
        subject: 'math',
        score: 10
    },
    {
        subject: 'chinese',
        score: 20
    },
    {
        subject: 'english',
        score: 30
    }
];

var sum = result.reduce(function(prev, cur) {
    return cur.score + prev;
}, 0);
console.log(sum) //60

到此這篇關于JavaScript中reduce()詳解及使用方法的文章就介紹到這了,更多相關js中reduce()詳解內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 微信小程序中weui用法解析

    微信小程序中weui用法解析

    這篇文章主要介紹了微信小程序中weui用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • 深入理解JavaScript定時機制

    深入理解JavaScript定時機制

    JavaScript的setTimeout與setInterval是兩個很容易欺騙別人感情的方法,因為我們開始常常以為調用了就會按既定的方式執(zhí)行, 我想不少人都深有同感
    2010-10-10
  • 關于meta viewport中target-densitydpi屬性詳解(推薦)

    關于meta viewport中target-densitydpi屬性詳解(推薦)

    這篇文章主要介紹了關于meta viewport中target-densitydpi屬性詳解,通過不同的縮放比例實現(xiàn)了不同的預覽效果,具體操作步驟大家可查看下文的詳細講解,感興趣的小伙伴們可以參考一下。
    2017-08-08
  • Bootstrap 模態(tài)框(Modal)插件代碼解析

    Bootstrap 模態(tài)框(Modal)插件代碼解析

    Bootstrap 模態(tài)框(Modal)插件 模態(tài)框(Modal)是覆蓋在父窗體上的子窗體。這篇文章主要介紹了Bootstrap 模態(tài)框(Modal)插件代碼解析的相關資料,需要的朋友可以參考下
    2016-12-12
  • JavaScript中的高級特性分享

    JavaScript中的高級特性分享

    JavaScript是一種功能強大的編程語言,具有許多高級特性,本文將介紹JavaScript中的一些高級特性,包括閉包、原型繼承、高階函數(shù)、異步編程和模塊化,希望對大家有所幫助
    2023-06-06
  • js從Cookies里面取值的簡單實現(xiàn)

    js從Cookies里面取值的簡單實現(xiàn)

    遇到一個Js從Cookies里面取值的需求,Js貌似沒有現(xiàn)成的方法可以指定Key值獲取Cookie里面對應的值,簡單實現(xiàn)如下
    2014-06-06
  • vite添加環(huán)境變量import.meta.env的方法

    vite添加環(huán)境變量import.meta.env的方法

    在不同的文件里面配置不同的環(huán)境變量,可以讓我們的配置更加容易維護和使用,這里我們說下vite配置環(huán)境變量和模式是怎么配置的,對vite環(huán)境變量相關知識感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • JavaScript實現(xiàn)點擊切換驗證碼及校驗

    JavaScript實現(xiàn)點擊切換驗證碼及校驗

    這篇文章主要為大家詳細介紹了JavaScript實現(xiàn)點擊切換驗證碼及校驗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 微信小程序實現(xiàn)同時上傳多張圖片

    微信小程序實現(xiàn)同時上傳多張圖片

    這篇文章主要為大家詳細介紹了微信小程序實現(xiàn)同時上傳多張圖片,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • js實現(xiàn)多張圖片打包成zip

    js實現(xiàn)多張圖片打包成zip

    圖片下載是前端常見的需求,如果一張一張下載未免太影響體驗了,于是寫下了這個多張圖片打包成zip的demo
    2021-05-05

最新評論