filter、map、reduce三个高级函数

本文详细介绍了JavaScript中Array的三种核心操作:filter用于过滤数组元素;map用于转换数组中的每个元素;reduce则用于汇总数组所有内容。通过实例展示了每种方法的使用方式及其参数细节。

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

filter/map/reduce

1.filter(过滤)

filter(function, itetable)
filter也是一个常用的操作,它用于把Array的某些元素过滤掉,然后返回剩下的元素。
和map()类似,Array的filter()也接收一个函数。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是true还是false决定保留还是丢弃该元素。
回调函数

filter()接收的回调函数,其实可以有多个参数。通常我们仅使用第一个参数,表示Array的某个元素。回调函数还可以接收另外两个参数,表示元素的位置和数组本身:

// filter中的回调函数有一个要求: 必须返回一个boolean值
// true: 当返回true时, 函数内部会自动将这次回调的n加入到新的数组中
// false: 当返回false时, 函数内部会过滤掉这次的n
   const nums = [10, 20, 111, 222, 444, 40, 50]
   let newNums = nums.filter(function (n) {
     return n < 100  // 过滤条件
   })
   console.log(newNums); // 返回一个数组

2.map (处理)

map()方法定义在JavaScript的Array中,它返回一个新的数组,数组中的元素为原始数组调用函数处理后的值。

  • 不会对空数组进行检测
  • 不会改变原数组

参数说明:
function(currentValue, index, arr):必须。为一个函数,数组中的每个元素都会执行这个函数。其中函数参数:

  • currentValue:必须。当前元素的的值。
  • index:可选。当前元素的索引。
  • arr:可选。当前元素属于的数组对象。
    const nums = [10, 20, 111, 222, 444, 40, 50]
    let new2Nums = newNums.map(function (n) { // 20
      return n * 2
    })
    console.log(new2Nums);

3.reduce(汇总)

1.reduce(callback,initiaValue)会传入两个变量,回调函数(callback)和初始值(initValue)。
2.假设函数有个传入参数,prev和next,index和array。 Prev和next是你必须要了解的。
3.当没有传入初始值时,prev是从数组中第一个元素开始的,next是第二个函数。
4.但是当传入初始值(initiaValue)后,第一个prev将是initivalValue,next将是数组中的第一个元素

    // reduce作用对数组中所有的内容进行汇总
    const nums = [10, 20, 111, 222, 444, 40, 50]
    let total = nums.reduce(function (preValue, n) {
      return preValue + n
    }, 0)
    console.log(total);
    // 第一次: preValue 0 n 20
    // 第二次: preValue 20 n 40
    // 第二次: preValue 60 n 80
    // 第二次: preValue 140 n 100
// 240
// 统计一个数组中有多少个不重复的单词:
let arr = ["apple","orange","apple","orange","pear","orange"];
function getWordCnt(){
  return arr.reduce(function(prev,next){
    prev[next] = (prev[next] + 1) || 1;
    console.log(prev);
    return prev;
  },{});
}
console.log(getWordCnt()); // VM3704:14 {apple: 2, orange: 3, pear: 1}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值