一、Filter的使用及原理实现filter()方法创建一个新数组,通过检查所有的元素来检查新数组中的元素指定数组元素中的条件。filter()不会检查空数组,也不会改变原始数组。1.语法array.filter(function(currentValue,index,arr),thisValue)参数说明currentValue,必须。当前元素的值索引,可选。当前元素的索引值arr,可选。当前元素所属的数组对象thisValue,可选。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,则“this”的值为“undefined”,返回一个包含所有符合条件的元素的数组。如果没有匹配的元素,则返回一个空数组。2.用法letarr=[1,2,3,4,5,6,7,8];让result=arr.filter((item)=>item>5);控制台日志(结果);//[6,7,8]3.实现原理Array.prototype.filter1=function(fn){if(typeoffn!=="function"){thrownewTypeError(`${fn}isnotafunction`);}让newArr=[];for(leti=0;i5;});console.log(结果);//[6,7,8]2.map的用法和实现原理map()方法返回一个新的数组,数组中的元素是对原数组元素调用函数处理后的值。map()方法按原始数组元素顺序依次处理元素。map()不会检查空数组,也不会改变原始数组。1.语法array.map(function(currentValue,index,arr),thisValue)参数说明currentValue,必须。当前元素的值索引,可选。当前元素的索引值arr,可选。当前元素所属的数组对象thisValue,可选。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,或者传入null或undefined,则回调函数的this为全局对象返回一个新数组,数组中的元素为对原数组元素调用函数处理后的值。2.用法letarr=["Tom","Mike","Shanguagua"];letresult=arr.map((item,index)=>{return`${index+1}name:${item}`;});console.log(结果);//['不。1:汤姆','不。2:迈克','不。3:山瓜瓜']3.实现原理Array.prototype.map1=function(fn){if(typeoffn!=="function"){thrownewTypeError(`${fn}isnotafunction`);}让newArr=[];for(leti=0;i{return`${index+1}item:${项}`;});控制台日志(结果);//['不。1:汤姆','不。2:迈克','不。3:山瓜瓜']3.reduce用法及原理reduce()方法接收一个函数作为累加器,数组中的每个值(从左到右)开始递减,最后计算为一个值。reduce()可以用作函数compose的高阶函数。注意:reduce()不会对空数组执行回调函数。1.语法array.reduce(function(total,currentValue,currentIndex,arr),initialValue)参数说明total:必填。初始值,或者计算后的返回值currentValue:必填。当前元素currentIndex:可选。当前元素的索引arr:可选。当前元素所属的数组对象initialValue:可选。传递给函数2的初值,用法letarr=[1,2,3,4,5,6,7,8,9,10];让result=arr.reduce(function(total,currentValue,currentIndex,arr){returntotal+currentValue;},0);控制台日志(结果);//553.实现原理Array.prototype.reduce1=function(reducer,initVal){for(leti=0;iitem>=2);控制台日志(结果);//23.实现原理Array.prototype.find1=function(fn){if(typeoffn!=="function"){thrownewTypeError(`${fn}isnotafunction`);}for(leti=0;iitem>=2);console.log(result);//2五、一些用法和原理实现some()方法用于检测数组中的元素是否满足指定条件(由函数提供)。some()方法会依次执行数组的每个元素:如果一个元素满足条件,则表达式返回true,其余元素将不再检查。如果没有满足条件的元素,则返回false。注意:some()不会检查空数组,也不会改变原始数组。1.语法array.some(function(currentValue,index,arr),thisValue)参数说明currentValue:必填。当前元素的值索引,可选。当前元素的索引值arr,可选。当前元素所属的数组对象thisValue,可选。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,则“this”返回布尔值“undefined”。如果数组中有满足条件的元素则返回真,否则返回假。2.用法letarr=[1,2,3,4,5,6,7];让flag=arr.some((item)=>item>5);控制台日志(标志);//true3、实现原理Array.prototype.some1=function(fn){if(typeoffn!=="function"){thrownewTypeError(`${fn}isnotafunction`);}for(leti=0;iitem>5);console.log(flag);//true六、every的用法和实现原理every()方法用于检测数组的所有元素是否满足指定条件(通过函数提供)。every()方法使用指定函数检查数组中的所有元素:如果检测到数组中的某个元素不满足要求,则整个表达式返回false,并且不再检查其余元素。如果所有元素都满足条件,则返回true。注意:every()不会检查空数组,也不会改变原始数组。1.语法array.every(function(currentValue,index,arr),thisValue)currentValue:必需。当前元素的值索引:可选。当前元素的索引值arr:可选。当前元素所属的数组对象thisValue:可选。执行回调时要使用的对象,传递给函数,并用作“this”的值。如果省略thisValue,则“this”返回布尔值“undefined”。如果所有元素都通过测试,则返回true,否则返回false。2.用法letarr=[1,2,3,4,5,6,7,8];让flag=arr.every((item)=>item>5);控制台日志(标志);//错误3。实现原理Array.prototype.every1=function(fn){if(typeoffn!=="function"){thrownewTypeError(`${fn}isnotafunction`);}for(leti=0;iitem>5);console.log(标志);//false感谢阅读,如果有帮助请点关注,收藏吧,欢迎关注前端技术站公众号,分享学习资料,技术总结!