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

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

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

reduce():

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

reduce() 方法會(huì)遍歷數(shù)組的每一項(xiàng),他接收兩個(gè)參數(shù):

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

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

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

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

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

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

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

總結(jié):

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

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

reduce 應(yīng)用場(chǎng)景:

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

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

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

      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ù)組轉(zhuǎn)為一維數(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.計(jì)算數(shù)組中每個(gè)元素出現(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.按屬性對(duì)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的高級(jí)用法

(1)計(jì)算數(shù)組中每個(gè)元素出現(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ù)組轉(zhuǎn)化為一維

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ù)組轉(zhuǎn)化為一維

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)、對(duì)象里的屬性求和
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

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

相關(guān)文章

  • PHP 實(shí)現(xiàn)一種多文件上傳的方法

    PHP 實(shí)現(xiàn)一種多文件上傳的方法

    之前做項(xiàng)目的時(shí)候在實(shí)現(xiàn)表單中file類型input選擇多圖片時(shí)有很多種實(shí)現(xiàn)方法,今天小編給大家分享基于php實(shí)現(xiàn)一種多文件上傳的方法,需要的朋友參考下吧
    2017-09-09
  • javascript 操作Word和Excel的實(shí)現(xiàn)代碼

    javascript 操作Word和Excel的實(shí)現(xiàn)代碼

    javascript 操作Word和Excel的實(shí)現(xiàn)代碼, 需要的朋友可以參考下。
    2009-10-10
  • 一文詳解如何處理JavaScript中的事件委托

    一文詳解如何處理JavaScript中的事件委托

    事件委托是指將一個(gè)事件處理程序綁定到父元素上,而不是直接綁定到每個(gè)子元素上,下面就跟隨小編一起來(lái)了解一下JavaScript是如何處理事件委托的吧
    2024-12-12
  • JavaScript構(gòu)造函數(shù)舉例詳解

    JavaScript構(gòu)造函數(shù)舉例詳解

    Javascript構(gòu)造函數(shù)是非常強(qiáng)大的,它可能也是Javascript能被充分利用的特點(diǎn)之一,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),這篇文章主要給大家介紹了關(guān)于JavaScript構(gòu)造函數(shù)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 微信小程序?qū)崿F(xiàn)計(jì)算器案例

    微信小程序?qū)崿F(xiàn)計(jì)算器案例

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)計(jì)算器案例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Javascript實(shí)現(xiàn)快速排序(Quicksort)的算法詳解

    Javascript實(shí)現(xiàn)快速排序(Quicksort)的算法詳解

    排序算法(Sorting algorithm)是計(jì)算機(jī)科學(xué)最古老、最基本的課題之一,要想成為合格的程序員,就必須理解和掌握各種排序算法。
    2015-09-09
  • javascript獲取網(wǎng)頁(yè)各種高寬及位置的方法總結(jié)

    javascript獲取網(wǎng)頁(yè)各種高寬及位置的方法總結(jié)

    下面小編就為大家?guī)?lái)一篇javascript獲取網(wǎng)頁(yè)各種高寬及位置的方法總結(jié)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • echarts中X軸顯示特定個(gè)數(shù)label并修改樣式的方法詳解

    echarts中X軸顯示特定個(gè)數(shù)label并修改樣式的方法詳解

    最近在使用Echarts圖表遇到些特別的需求,想著給大家整理下,所以下面這篇文章主要給大家介紹了關(guān)于echarts中X軸顯示特定個(gè)數(shù)label并修改樣式的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • JavaScript輸出為[object?Object]問(wèn)題的解決辦法

    JavaScript輸出為[object?Object]問(wèn)題的解決辦法

    平時(shí)我們?cè)诮邮蘸蠖朔祷氐膉son對(duì)象通常是一個(gè)字符串類型的object,所以一般我們要對(duì)這個(gè)object進(jìn)行類型轉(zhuǎn)化后,我們才能使用object里面的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于JavaScript輸出為[object?Object]問(wèn)題的解決辦法,需要的朋友可以參考下
    2023-11-11
  • JavaScript中的索引數(shù)組、關(guān)聯(lián)數(shù)組和靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組講解

    JavaScript中的索引數(shù)組、關(guān)聯(lián)數(shù)組和靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組講解

    這篇文章主要介紹了JavaScript中的索引數(shù)組、關(guān)聯(lián)數(shù)組和靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組講解,本文介紹了從數(shù)組的下標(biāo)分為索引數(shù)組、關(guān)聯(lián)數(shù)組、從對(duì)數(shù)據(jù)的存儲(chǔ)分為靜態(tài)數(shù)組、動(dòng)態(tài)數(shù)組,并給出了示例,需要的朋友可以參考下
    2014-11-11

最新評(píng)論