reduce

更新时间:2022-12-28 12:13:55 阅读: 评论:0


2022年12月28日发(作者:读书吧少年)

reduce,some,every函数的⽤法

reduce

reduce-MDN

描述

reduce

为数组中的每⼀个元素依次执⾏

callback

函数,不包括数组中被删除或从未被赋值的元素,接受四个参数:

accumulator

currentValue

currentIndex

array

回调函数第⼀次执⾏时,

accumulator

currentValue

的取值有两种情况:调⽤

reduce

时提供

initialValue

accumulator

取值

initialValue

currentValue

取数组中的第⼀个值;没有提供

initialValue

accumulator

取数组中的第⼀个值,

currentValue

取数组中的第⼆个值。

注意:如果没有提供

initialValue

,reduce会从索引1的地⽅开始执⾏callback⽅法,跳过第⼀个索引。如果提供

initialValue

,从索引0开始。

如果数组为空且没有提供

initialValue

,会抛出

TypeError

。如果数组仅有⼀个元素(⽆论位置如何)并且没有提供

initialValue

,或者有提

initialValue

但是数组为空,那么此唯⼀值将被返回并且

callback

不会被执⾏。

提供初始值通常更安全。

数组⾥所有值的和

varsum=[0,1,2,3].reduce(function(a,b){

returna+b;

},0);

//sumis6

你也可以写成箭头函数的形式:

vartotal=[0,1,2,3].reduce(

(acc,cur)=>acc+cur,

0

);

将⼆维数组转化为⼀维

varflattened=[[0,1],[2,3],[4,5]].reduce(

function(a,b){

(b);

},

[]

);

//flattenedis[0,1,2,3,4,5]

你也可以写成箭头函数的形式:

varflattened=[[0,1],[2,3],[4,5]].reduce(

(acc,cur)=>(cur),

[]

);

计算数组中每个元素出现的次数

varnames=['Alice','Bob','Tiff','Bruce','Alice'];

varcountedNames=(function(allNames,name){

if(nameinallNames){

allNames[name]++;

}

el{

allNames[name]=1;

}

returnallNames;

},{});

//countedNamesis:

//{'Alice':2,'Bob':1,'Tiff':1,'Bruce':1}

使⽤扩展运算符和initialValue绑定包含在对象数组中的数组

//friends-anarrayofobjects

//whereobjectfield"books"-listoffavoritebooks

varfriends=[{

name:'Anna',

books:['Bible','HarryPotter'],

age:21

},{

name:'Bob',

books:['Warandpeace','RomeoandJuliet'],

age:26

},{

name:'Alice',

books:['TheLordoftheRings','TheShining'],

age:18

}];

//allbooks-listwhichwillcontainallfriends'books+

//additionallistcontainedininitialValue

varallbooks=(function(prev,curr){

return[...prev,...];

},['Alphabet']);

//allbooks=[

//'Alphabet','Bible','HarryPotter','Warandpeace',

//'RomeoandJuliet','TheLordoftheRings',

//'TheShining'

//]

数组去重

letarr=[1,2,1,2,3,5,4,5,3,4,4,4,4];

letresult=().reduce((init,current)=>{

if(===0||init[-1]!==current){

(current);

}

returninit;

},[]);

(result);//[1,2,3,4,5]

some

some-MDN

⽰例

测试数组元素的值

下⾯的例⼦检测在数组中是否有元素⼤于10。

functionisBiggerThan10(element,index,array){

returnelement>10;

}

[2,5,8,1,4].some(isBiggerThan10);//fal

[12,5,8,1,4].some(isBiggerThan10);//true

使⽤箭头函数测试数组元素的值

Arrowfunctionsprovideashortersyntaxforthesametest.

[2,5,8,1,4].some(x=>x>10);//fal

[12,5,8,1,4].some(x=>x>10);//true

判断数组元素中是否存在某个值

Tomimicthefunctionofthe

includes()

method,thiscustomfunctionreturns

true

iftheelementexistsinthearray:

varfruits=['apple','banana','mango','guava'];

functioncheckAvailability(arr,val){

(function(arrVal){

returnval===arrVal;

});

}

checkAvailability(fruits,'kela');//fal

checkAvailability(fruits,'banana');//true

使⽤箭头函数判断数组元素中是否存在某个值

varfruits=['apple','banana','mango','guava'];

functioncheckAvailability(arr,val){

(arrVal=>val===arrVal);

}

checkAvailability(fruits,'kela');//fal

checkAvailability(fruits,'banana');//true

将任意值转换为布尔类型

varTRUTHY_VALUES=[true,'true',1];

functiongetBoolean(value){

'ustrict';

if(typeofvalue==='string'){

value=rCa().trim();

}

returnTRUTHY_(function(t){

returnt===value;

});

}

getBoolean(fal);//fal

getBoolean('fal');//fal

getBoolean(1);//true

getBoolean('true');//true

every

every-MDN

例⼦:检测所有数组元素的⼤⼩

下例检测数组中的所有元素是否都⼤于10。

functionisBigEnough(element,index,array){

return(element>=10);

}

varpasd=[12,5,8,130,44].every(isBigEnough);

//pasdisfal

pasd=[12,54,18,130,44].every(isBigEnough);

//pasdistrue

本文发布于:2022-12-28 12:13:55,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/46560.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:barefoot
下一篇:戏剧演员
标签:reduce
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图