手动实现JS数组中map、filter、reduce方法

手动实现 Array.prototype.map 方法

map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果

function map(arr,callback){
  // 检查传递的参数是否正确
  if(!Array.isArray(arr) || !arr.length || typeof callback !== 'function'){
     return [];
  } else {
    let result = [];
     // 每次调用此函数时,都会创建一个 result 数组
     // 因为不改变原始数组
    for(let i = 0 ,len = arr.length; i < len ; i ++){
       result.push( callback(arr[i],i,arr) );
    }
    return result;
 }
}
手动实现Array.prototypr.filter 方法

filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

function filter(arr,callback){
  // 检查传递的参数是否正确
    if(!Array.isArray(arr) || !arr.length || typeof callback !== 'function'){
       return [];
    }else{
       let result = [];
       // 每次调用此函数时,都会创建一个 result 数组
      // 因为不改变原始数组
       for(let i = 0 , len = arr.length ; i < len ; i++){
          // 检查 cllback 的返回值是否是真值
          if( callback(arr[i],i,arr) ){
          // 如果条件为真,则将数组元素 push 到 result 中
             result.push( callback( arr[i], i ,arr));
          }
       }
       return result;
     }
}
手动实现Array.prototype.reduce方法

reduce() 方法对数组中的每个元素执行一个提供的reducer函数(升序执行),将其结果汇总为单个返回值。

function reduce( arr, callback ,initValue){
    //检查输入参数是否正确
    if(!Array.isArray(arr) || !arr.length || typeof callback !== 'function'){
        return [];
      }else{
       // 如果没有将initValue传递给该函数,使用第一个数组项作为initValue
       let hasInitValue = initValue !== undefined;
       let value = hasInitValue ? initValue : arr[0];
       // 如果有传递 initValue,则索引从 1 开始,否则从 0 开始
      for (let i = hasInitValue ? 0 : 1, len = arr.length; i < len; i++) {
         value = callback(value, arr[i], i, arr);
      }
      return value;
  }
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值