国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
es6 reduce()介紹
1、累加和累積乘法
2、獲取一個數(shù)組的最大值和最小值
3、計算數(shù)組中元素出現(xiàn)的頻率
4、多個數(shù)組的展平
首頁 web前端 前端問答 es6中reduce()怎麼用

es6中reduce()怎麼用

Jan 29, 2023 pm 06:35 PM
es6 reduce()

在es6中,reduce()函數(shù)用於對數(shù)組中的每個元素從左到右依次執(zhí)行一個由用戶提供的回調(diào)函數(shù),並將其累積結(jié)果匯總為單個返回值;語法“ arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])」。 reduce()函數(shù)不會改變原始數(shù)組。

es6中reduce()怎麼用

本教學操作環(huán)境:windows7系統(tǒng)、ECMAScript 6版、Dell G3電腦。

es6 reduce()介紹

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

第一個參數(shù): callback函數(shù)

#執(zhí)行數(shù)組中每個值(如果沒有提供第二個參數(shù)initialValue ,則第一個值除外)的函數(shù),包含四個參數(shù):

  • ?accumulator:累計回呼的傳回值; 它是上次呼叫回呼時傳回的累積值,或initialValue(見於下方)。?

  • currentValue:陣列中正在處理的元素。

  • ?currentIndex可選 :陣列中正在處理的目前元素的索引。如果提供了initialValue,則起始索引號為0,否則從索引1起始。

  • array可選:呼叫reduce()的原始數(shù)組

第二個參數(shù): initialValue可選

作為第一次呼叫callback函數(shù)時的第一個參數(shù)的值。如果沒有提供初始值,則將使用陣列中的第一個元素。注意: 在沒有初始值的空數(shù)組上呼叫 reduce 將會報錯。

這樣看起來會有點蒙,其實就是兩種情況:一種情況是給了第二個參數(shù)initialValue初始值;一種是沒提供初始值。

var arr = [1, 2, 3];
function reducer(parmar1, parmar2){
}
arr.reduce(reducer)

reduce是數(shù)組原型物件上的一個方法,可以幫助我們操作數(shù)組。它將另一個函數(shù)作為其參數(shù),可以稱為reducer。

reducer 有兩個參數(shù)。第一個參數(shù) param1 是最後一次 reducer 運行的結(jié)果。如果這是第一次運行 reducer,則 param1 的預設值是數(shù)組第一個元素的值。

reduce 方法循環(huán)遍歷數(shù)組中的每個元素,就像在 for 迴圈中一樣。並將循環(huán)中的目前值作為參數(shù)2。

遍歷完數(shù)組,reduce會傳回最後一個reducer計算的結(jié)果。

我們來看一個詳細的例子。

var arr = ['a', 'b', 'c', 'd', 'e'];
function add(x, y) {
 return x + y;
}
arr.reduce(add)

es6中reduce()怎麼用

接下來,我們來探索一下上面的程式碼是如何執(zhí)行的。

在這段程式碼中,reducer 是 add 。

首先,因為我們是第一次執(zhí)行add,所以數(shù)組中的第一個元素'a'會被當作add的第一個參數(shù),然後循環(huán)會從數(shù)組的第二個元素' b'開始。這次,'b' 是 add 的第二個參數(shù)。

es6中reduce()怎麼用

第一次計算後,我們得到結(jié)果'ab'。此結(jié)果將被快取並在下一次新增計算中用作 param1。同時,數(shù)組中的第三個參數(shù)'c'將用作add的param2。

es6中reduce()怎麼用

同樣,reduce 會繼續(xù)遍歷數(shù)組中的元素,運行 'abc' 和 'd' 作為 add 的參數(shù)。

es6中reduce()怎麼用

最後,遍歷陣列中最後一個元素後,傳回計算結(jié)果。

es6中reduce()怎麼用

現(xiàn)在我們有了結(jié)果:'abcde'。

所以,我們可以看到reduce也是一種遍歷陣列的方式!它依序取數(shù)組中每個元素的值並執(zhí)行reducer函數(shù)。

但我們可以看到,上面的循環(huán)並沒有那種和諧的美感。因為我們把陣列的第一個元素,也就是'a'當作初始的param1,然後從陣列的第二個元素循環(huán)得到param2。

實際上,我們可以將reduce中的第二個參數(shù)指定為reducer函數(shù)的param1的初始值,這樣param2就會從陣列的第一個元素開始循環(huán)取得。

程式碼如下:

var arr = ['a', 'b', 'c', 'd', 'e'];
function add(x, y) {
 return x + y;
}
arr.reduce(add, 's')

es6中reduce()怎麼用

#

這一次,我們第一次調(diào)用reducer時將's'作為param1,然后從第一個元素開始依次遍歷數(shù)組。

es6中reduce()怎麼用

所以我們可以使用這個語法來重寫我們的第一個代碼片段。

var arr = ['a', 'b', 'c', 'd', 'e'];
function add(x, y) {
   return x + y;
}
arr.reduce(add, '')

接下來,我們將進入實際編程章節(jié),體驗reduce的強大威力。

1、累加和累積乘法

如果我們想得到數(shù)組中所有元素的總和,你會怎么做?

一般來說,你可能會這樣寫:

function accumulation(arr) {
 let sum = 0;
 for (let i = 0; i < arr.length; i++) {
   sum = sum + arr[i];
 }
 return sum;
}

當然,你可能還有其他的寫法,但是只要使用for循環(huán),代碼就會顯得多余。

那我們看看上面的累加函數(shù)是做什么的:

  • 將初始總和設置為零
  • 取出數(shù)組中的第一個元素并求和
  • 在 sum 中緩存上一步的結(jié)果
  • 依次取出數(shù)組中的其他元素,進行上述操作
  • 返回最終結(jié)果

我們可以看到,當我們用文字描述上述步驟時,很明顯它符合reduce的使用。所以我們可以使用reduce來重寫上面的代碼:

function accumulation(arr) {
 function reducer(x, y) {
   return x + y
 }
 return arr.reduce(reducer, 0);
}

如果你習慣使用箭頭函數(shù),上面的代碼看起來會更簡潔:

function accumulation(arr) {
 return arr.reduce((x, y) => x + y, 0);
}

一行代碼搞定!

es6中reduce()怎麼用

當然,累積乘法和累加是完全一樣的:

function multiplication(arr) {
   return arr.reduce((x, y) => x * y, 1);
}

很多時候,我們在求和的時候需要加上一個權(quán)重,這樣更能體現(xiàn)reduce的優(yōu)雅。

const scores = [
 { score: 90, subject: "HTML", weight: 0.2 },
 { score: 95, subject: "CSS", weight: 0.3 },
 { score: 85, subject: "JavaScript", weight: 0.5 }
];
const result = scores.reduce((x, y) => x + y.score * y.weight, 0); // 89

2、獲取一個數(shù)組的最大值和最小值

如果要獲取數(shù)組的最大值和最小值,可以這樣寫:

function max(arr){
 let max = arr[0];
 for (let ele of arr) {
   if(ele > max) {
     max = ele;
   }
 }
 return max;
}

這和以前一樣,如果我們使用reduce,我們可以在一行代碼中完成。

let arr = [3.24, 2.78, 999];
arr.reduce((x, y) => Math.max(x, y));
arr.reduce((x, y) => Math.min(x, y));

es6中reduce()怎麼用

3、計算數(shù)組中元素出現(xiàn)的頻率

我們經(jīng)常需要統(tǒng)計數(shù)組中每個元素出現(xiàn)的次數(shù)。reduce 方法可以幫助我們實現(xiàn)這一點。

function countFrequency(arr) {
 return arr.reduce(function(result, ele){
   // Judge whether this element has been counted before
   if (result.get(ele) != undefined) {
     /**
       * If this element has been counted before,
       * increase the frequency of its occurrence by 1
       */
     result.set(ele, result.get(ele) + 1)
   } else {
     /**
       * If this element has not been counted before,
       * set the frequency of its occurrence to 1
       */
     result.set(ele, 1);
   }
   return result;
 }, new Map());
}

注意,我們使用map對象而不是對象來存儲統(tǒng)計后的頻率,因為數(shù)組中的元素可能是對象類型,而對象的key只能是字符串或符號類型。

這里有兩個例子:

es6中reduce()怎麼用

1es6中reduce()怎麼用

同樣,如果要統(tǒng)計字符串中每個字符出現(xiàn)的頻率,可以先將字符串轉(zhuǎn)換為字符數(shù)組,然后按照上面的方法。

let str = &#39;helloworld&#39;;
str.split(&#39;&#39;).reduce((result, currentChar) => {
   result[currentChar] ? result[currentChar] ++ : result[currentChar] = 1;
    return result;                            
}, {})

1es6中reduce()怎麼用

因為字符類型可以用作對象的鍵,所以我們這里不使用 Map。

4、多個數(shù)組的展平

function Flat(arr = []) {
   return arr.reduce((t, v) => t.concat(Array.isArray(v) ? Flat(v) : v), [])
}

1es6中reduce()怎麼用

通過reduce依次訪問數(shù)組中的每個元素。如果我們發(fā)現(xiàn)元素還是一個數(shù)組,就遞歸調(diào)用 flat 方法。

【相關推薦:javascript視頻教程、web前端

以上是es6中reduce()怎麼用的詳細內(nèi)容。更多資訊請關注PHP中文網(wǎng)其他相關文章!

本網(wǎng)站聲明
本文內(nèi)容由網(wǎng)友自願投稿,版權(quán)歸原作者所有。本站不承擔相應的法律責任。如發(fā)現(xiàn)涉嫌抄襲或侵權(quán)的內(nèi)容,請聯(lián)絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅(qū)動的應用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
ES6怎麼求數(shù)組反轉(zhuǎn) ES6怎麼求數(shù)組反轉(zhuǎn) Oct 26, 2022 pm 06:19 PM

在ES6中,可以利用數(shù)組物件的reverse()方法來實現(xiàn)數(shù)組反轉(zhuǎn),該方法用於顛倒數(shù)組中元素的順序,將最後一個元素放在第一位,而第一個元素放在最後,語法「array.reverse()」。 reverse()方法會修改原始數(shù)組,如果不想修改需要配合擴充運算子「...」使用,語法「[...array].reverse()」。

async是es6還是es7的 async是es6還是es7的 Jan 29, 2023 pm 05:36 PM

async是es7的。 async和await是ES7中新增內(nèi)容,是對於非同步操作的解決方案;async/await可以說是co模組和生成器函數(shù)的語法糖,用更清晰的語意解決js非同步程式碼。 async顧名思義是「非同步」的意思,async用於聲明一個函數(shù)是異步的;async和await有一個嚴格規(guī)定,兩者都離不開對方,且await只能寫在async函數(shù)中。

小程式為什麼要將es6轉(zhuǎn)es5 小程式為什麼要將es6轉(zhuǎn)es5 Nov 21, 2022 pm 06:15 PM

為了瀏覽器相容。 ES6作為JS的新規(guī)範,加入了許多新的語法和API,但現(xiàn)代瀏覽器對ES6新特性支援不高,所以需將ES6程式碼轉(zhuǎn)換為ES5程式碼。在微信web開發(fā)者工具中,會預設使用babel將開發(fā)者ES6語法程式碼轉(zhuǎn)換為三端都能很好支援的ES5的程式碼,幫助開發(fā)者解決環(huán)境不同所帶來的開發(fā)問題;只需要在專案中配置勾選好「ES6轉(zhuǎn)ES5」選項即可。

es6怎麼找出2個數(shù)組中不同項 es6怎麼找出2個數(shù)組中不同項 Nov 01, 2022 pm 06:07 PM

步驟:1、將兩個陣列分別轉(zhuǎn)換為set類型,語法「newA=new Set(a);newB=new Set(b);」;2、利用has()和filter()求差集,語法“ new Set([...newA].filter(x =>!newB.has(x)))”,差集元素會被包含在一個set集合中返回;3、利用Array.from將集合轉(zhuǎn)為數(shù)組類型,語法“Array.from(集合)”。

es5和es6怎麼實現(xiàn)陣列去重 es5和es6怎麼實現(xiàn)陣列去重 Jan 16, 2023 pm 05:09 PM

es5中可以利用for語句和indexOf()函數(shù)來實現(xiàn)數(shù)組去重,語法“for(i=0;i<數(shù)組長度;i++){a=newArr.indexOf(arr[i]);if(a== -1){...}}」。在es6中可以利用擴充運算子、Array.from()和Set來去重;需要先將陣列轉(zhuǎn)為Set物件來去重,然後利用擴充運算子或Array.from()函數(shù)來將Set物件轉(zhuǎn)回數(shù)組即可。

es6暫時性死區(qū)是什麼意思 es6暫時性死區(qū)是什麼意思 Jan 03, 2023 pm 03:56 PM

在es6中,暫時性死區(qū)是語法錯誤,是指let和const命令使區(qū)塊形成封閉的作用域。在程式碼區(qū)塊內(nèi),使用let/const指令宣告變數(shù)之前,變數(shù)都是不可用的,在變數(shù)宣告之前屬於該變數(shù)的「死區(qū)」;這在語法上,稱為「暫時性死區(qū)」。 ES6規(guī)定暫時性死區(qū)和let、const語句不出現(xiàn)變量提升,主要是為了減少運行時錯誤,防止在變量聲明前就使用這個變量,從而導致意料之外的行為。

es6怎麼判斷陣列裡總共有多少項 es6怎麼判斷陣列裡總共有多少項 Jan 18, 2023 pm 07:22 PM

在es6中,可以利用array物件的length屬性來判斷數(shù)組裡總共有多少項,即取得數(shù)組中元素的個數(shù);該屬性可傳回數(shù)組中元素的數(shù)組,只需要使用「array.length」語句即可傳回表示數(shù)組物件的元素個數(shù)的數(shù)值,也就是長度值。

es6 import會變數(shù)提升嗎 es6 import會變數(shù)提升嗎 Jan 18, 2023 pm 07:44 PM

ES6 import會產(chǎn)生變數(shù)提升的現(xiàn)象。變數(shù)提升是將變數(shù)宣告提升到它所在作用域的最開始的部分。 js要經(jīng)歷編譯跟執(zhí)行階段,在編譯階段的時候,會蒐集所有的變量聲明並且提前聲明變量,而其他的語句都不會改變他們的順序,因此,在編譯階段的時候,第一步就已經(jīng)執(zhí)行了,而第二部則是在執(zhí)行階段執(zhí)行到該語句的時候才執(zhí)行。

See all articles