归约函数reduce&映射数组map(笔记)

本文介绍了JavaScript中的forEach函数用于数组遍历,reduce函数用于数组归约,以及countZeroes函数用于计算数组中0的个数。同时展示了如何定义映射函数map用于创建新数组。文章还提供了一个额外的函数count用于测试数组元素是否满足特定条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

function forEach(array,action){
  for(var i=0;i<array.length;i++)
    action(array[i]);
}
function reduce(combine,base,array){
  forEach(array,function(element){
  base=combine(base,element);})
  return base;
}

function countZeroes(array){
  function counter(total,element){
    return total+(element===0?1:0);
  }
  return reduce(counter,0,array);
}
console.log(countZeroes([0,23,56,0,0]))

3

【归约函数】

以上三个函数,第一个forEach()实现的是遍历数组,并对其中的每一个元素进行anction()的操作。

第二个 reduce()即归约函数(reduce or fold)通过重复调用一个函数//(该函数将数组的每个元素都加到一个基值上),将数组转化为单一值。

归约函数的三个参数分别是——待执行函数,基数,数组(这样的顺序主要基于习惯问题)。

第三个  函数即计算数组中0元素的个数,解决这个问题即重复比较数组的元素是否为0.故而可以选择归约函数。对应的三个参数分别——counter()函数,0,array。

其中,counter用到条件运算符,值等于0,则基数加一。

 

另,可以另外定义一个算法函数count,供countZeros使用。

function forEach(array,action){
  for(var i=0;i<array.length;i++)
    action(array[i]);
}
function count(test,array){
    var counted=0;
  forEach(array,function(element){
      if(test(element)) counted++;
  })
return counted; }
function countZeroes(array){ function isZero(x){return x===0;}//整个函数作为返回值,传递作为if的判断条件。因为函数本身是比较参数是否为0,返回值即true/false. return count(isZero,array); }
console.log(countZeroes([0,23,56,0,0]))

3


 

映射数组

所谓映射,是指他可以遍历数组,并且将函数应用于每个元素(比如forEach)。但是他不是丢弃函数返回值,而是利用这些返回值重新建立一个新的数组。

函数count(),用以测试数组中的元素是否符合test的条件,符合则统计数字加一。

函数countZeros(),接受一个参数、即测试的数组。并在其中定义测试的方法test=isZero【因为该方法只对countZeros()函数有意义,所以定义在该函数体内。而其他的像是count()这类,其参数具有更加抽象的普遍意义,故而单独定义。以供反复使用】

function map(func,array){
    var result=[];
  forEach(array,function(element){
  result.push(func(element));
  }
  )
  return result;
}
console.log(map(Math.round,[0.09,2,3.4,9.4,Math.PI]));
[0, 2, 3, 9, 3]

 

转载于:https://www.cnblogs.com/sinister/p/4600970.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值