常用的方法:
- reduce
- reducerRight
- map
- forEach
- filter
- some
- find
- findIndex
- every
1. reduce:
主要用于汇总的功能返回的是一个值,比如求和sum,传入四个参数val item index originArray,当有初始值得的时候第一次运算val=初始值,item=arr[0],当无初始值的时候val=arr[0],item=arr[1]
let arr1=[1,2,3,4,5]
let newArr=arr1.reduce(function(val,item,index,originalArr){
return val+item
},0)
2.reducerRight
跟reduce功能一样,只不过是从右往左算
3. map
返回的是一个经过函数处理的新数组,原数组不会改变
arr1.map(function(item,index,arr){
return {age:item}
})
4. forEach
没有返回值也不改变原数组,只将item,index,arr传入回调函数,让用户自行处理
let sum=0;
arr1.forEach (function(item,index,arr){ //求和
sum+=item
})
5. filter
返回一个新数组并且这个新数组经过过滤的,并且不改变原数组的值
let sum=0;
let newArr=arr1.filter (function(item,index,arr){ //求和
return item>=3
})
//实现filter
Array.prototype.doFilter=function(fn){
let arr=[];
for(let i=0;i<this.length;i++){
let flat=fn(this[i]);
if(flat){
arr.push(this[i]);
}
}
return arr;
}
6. find
返回一个值true或者undefined
- 当数组中的元素在测试条件时返回符合条件的值。
- 如果没有符合条件的元素返回 undefined
test3(){
let arr1=[1,2,3,4,5]
let result=arr1.find((item,index,arr)=>{
return item==3
});
console.log('result',result) //3
}
//自己写Arry find方法
Arry.prototype.doFind=function(fn){
for(let i=0;i<this.length,i++){
let result=fn(this[i]);
if(result){
return this[i]
}
}
}
7. findIndex
返回一个值index或者-1
- 当数组中的元素在测试条件时返回该条件的所在位置, findIndex() 返回符合条件的元素的位置,之后的值不会再调用执行函数。
- 如果没有符合条件的元素返回-1
let index=arr1.findIndex((item,index,arr)=>{
return item==1
})
//如何实现findIndex
Array.prototype.doFind=function(fn){ //doFind==find
for(let i=0;i<this.length;i++){
let result= fn(this[i]);
if(result){
return i
}
}
return -1
}
8. every
返回一个值true或者false,
- 当数组所有项都满足条件时返回true,否则返回false;
let index=arr1.every((item,index,arr)=>{
return item>1
})
实现every
Array.prototype.doFind=function(fn){ //doFind==find
let flat=true;
for(let i=0;i<this.length;i++){
let flat= fn(this[i]);
if(!flat){
flat=false
}
}
return flat;
}
8. some
返回一个值true或者false
- 当有一个元素满足要求返回true,全部不满足返回false;
let index=arr1.some((item,index,arr)=>{
return item>1
})
//实现some
Array.prototype.doSome=function(fn){ //
for(let i=0;i<this.length;i++){
let flat= fn(this[i]);
if(flat){
return flat;
}
}
return false;
}