fillter()、map()、reduce()方法

本文介绍了JavaScript中用于数组处理的三个重要方法:filter()、map()和reduce()。filter()方法用于创建包含符合条件元素的新数组,不改变原数组;map()方法对数组的每个元素应用函数并返回处理后的数组,同样不改变原数组;reduce()方法则将数组元素累计计算为一个单一值,可接受初始值,对于空数组不会执行回调函数。

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

1.filter()检测数值元素,并返回符合条件所有元素的数组。
   filter() 方法创建一个新的数组,新数组中的元素检查指定数组中符合条件的所有元素。
   注意: filter() 不会对空数组进行检测。
   注意: filter() 不会改变原始数组。

array.filter(function(currentValue,index,arr), thisValue)

函数参数:

  • currentValue 必须。当前元素的值
  • index 可选。当前元素的索引值
  • arr 可选。当前元素属于的数组对象
  • thisValue 可选。初始值
var arr3 = [1,2,2,3,5,6,3,4]
//通过indexOf返回指定值第一次出现位置的下标,来数组去重
var arr4 = arr3.filter((x,index,self)=>{
    return self.indexOf(x) === index
})
console.log(arr4)

2.map()通过指定函数处理数组的每个元素,并返回处理后的数组。
 map返回一个新数组参数

array.map(function(currentValue,index,arr), thisValue)

函数参数:

  • currentValue 必须。当前元素的值
  • index 可选。当前元素的索引值
  • arr 可选。当前元素属于的数组对象
  • thisValue 可选。初始值
  • map() 方法按照原始数组元素顺序依次处理元素。
    注意: map() 不会对空数组进行检测。
    注意: map() 不会改变原始数组。
    注意: map()每个遍历的值都要return出去
var arr = [1, 2, 3,4]
var arr1 = arr.map(x => x *2) //[2, 4, 6,8]
var arr1 = arr.map(x => {x *2}) //[undefined, undefined, undefined,undefined]
var arr1 = arr.map(x => {return x *2}) //[2, 4, 6,8]
var arr1 = arr.map(x => {
    if (x == 4) {
        return x * 2;
    }
}) //[undefined, undefined, undefined,8]
var arr1 = arr.map(x => {
    if (x == 4) {
        return x * 2;
    }
}) //[2, 4, 6,8]

3.reduce()将数组元素计算为一个值(从左到右)。
  reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
  reduce() 可以作为一个高阶函数,用于函数的 compose。
  注意: reduce() 对于空数组是不会执行回调函数的。

array.reduce(function(total	, currentValue	, currentIndex, arr), initialValue)

函数参数:

  • total 必需。表示上一次调用回调时的返回值,或者初始值 。
  • currentValue 必需。当前元素
  • currentIndex 可选。当前元素的索引
  • arr 可选。当前元素所属的数可选。
  • initialValue 传递给函数的初始值组对象。
//求和
var nums1 = nums.reduce((num, cur) => {
    //因未先传入值,num为第一个值15,cur为第二个值2
    return num + cur
})
//数组去重
var nums2 = nums.reduce((num, cur, index, arr) => {
    //因未先传入值,num为第一个值15,cur为第二个值2
    num.indexOf(cur) === -1 && num.push(cur)
    return num
}, [])
    //数组去重s
var nums3 = nums.reduce((num, cur) => {
    //因未先传入值,num为第一个值15,cur为第二个值2
    return num.includes(cur) ? num : num.concat(cur)
}, [])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值