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小时内删除。
留言与评论(共有 0 条评论) |