js数组迭代之forEach、map、reduce、filter

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

数组不论作为那种语言来说都是非常重要的,而且实际工作中也经常用到,那么对它的一些常用API的掌握程度就是基础是否扎实的体现,让我们通过这篇文章来和它打打招呼吧!

不知道大伙在学习数组API的时候有没有把它搞混呢?小编在刚开始学的时候老是搞混这个,今天就来和它battle一下,直接把它拿下

一、forEach常见用法

MDN中是这样解释的:
forEach() 方法对数组的每个元素执行一次给定的函数。

那么我们就来看一下它到底是怎么使用滴

1、使用

array.forEach( function ( currentValue [, index [, array ] ] ){
//函数体
} [ , thisArg ] )

function为传入的回调函数,可传入四个参数:
currentValue:数组中正在处理的当前元素 必须传入的参数!
index:数组中正在处理的当前元素的索引 。(可以省略)
array:原数组,forEach方法调用的那个数组。(可以省略)
thisArg :当执行回调函数 function 时,用作 this 的值。(可以省略)

forEach() 为每个数组元素执行一次 callback 函数;与 map() 或者 reduce() 不同的是,它总是返回 undefined 值,并且不可链式调用
forEach() 被调用时,不会改变原数组,也就是调用它的数组(尽管 callback 函数在被调用时可能会改变原数组)。

代码示例:

数组扁平化(这里只拍平一层)

function flatten(arr) {
    if (!Array.isArray(arr)) return arr
    let res = []
    arr.forEach(item => {  //这里只传递一个参数
        if (Array.isArray(item)) {
            res = res.concat(item)
        } else {
            res.push(item)
        }
    })
    return res
}

二、map常见用法

map() 方法通过对每个数组元素执行函数来创建新数组。
不会对没有值的数组元素执行函数。(纯函数)
不会更改原始数组。

1、使用

var new_array = arr.map(function callback( currentValue [, index [, array ] ]) {
// Return element for new_array
}[, thisArg])

function为传入的回调函数,可传入四个参数:
currentValue:数组中正在处理的当前元素 必须传入的参数!
index:数组中正在处理的当前元素的索引 (可以省略)
array:原数组,即调用map的那个数组。(可以省略)
thisArg :当执行回调函数 function 时,用作 this 的值。(可以省略)

如果 thisArg 参数提供给map,则会被用作回调函数的this值。否则 undefined 会被用作回调函数的this值。
map 不修改调用它的原数组本身(当然可以在 callback 执行时改变原数组)

代码示例:

求数组每一项的平方根

var numbers = [1, 4, 9];
var roots = numbers.map(Math.sqrt);
// roots的值为[1, 2, 3], numbers的值仍为[1, 4, 9]

三、reduce常见用法

MDN中是这样解释的:
reduce() 方法对数组中的每个元素按序执行一个由您提供的 reducer 函数,每一次运行 reducer 会将先前元素的计算结果作为参数传入,最后将其结果汇总为单个返回值。

1、使用

arr.reduce( callback ( accumulator, currentValue [, index [, array ] ] ) {
} [, initialValue ] )

第一次执行回调函数时,不存在“上一次的计算结果”。如果需要回调函数从数组索引为 0 的元素开始执行,则需要传递初始值。否则,数组索引为 0 的元素将被作为初始值 initialValue,迭代器将从第二个元素开始执行(索引为 1 而不是 0)。

其实就是第一个参数就是将数组已遍历参数全部相加的和(累加器).

一个 “reducer” 函数,包含四个参数:

  • accumulator:(必须)上一次调用 callbackFn 时的返回值。在第一次调用时,若指定了初始值 initialValue,其值则为 initialValue,否则为数组索引为 0 的元素 array[0]。
  • currentValue:(必须)数组中正在处理的元素。在第一次调用时,若指定了初始值 initialValue,其值则为数组索引为 0 的元素 array[0],否则为 array[1]。
  • currentIndex:(可选)数组中正在处理的元素的索引。若指定了初始值 initialValue,则起始索引号为 0,否则从索引 1 起始。
  • array:(可选)用于遍历的数组。
  • initialValue (可选
    作为第一次调用 callback 函数时参数 previousValue 的值。若指定了初始值 initialValue,则 currentValue 则将使用数组第一个元素;否则 previousValue 将使用数组第一个元素,而 currentValue 将使用数组第二个元素。

代码示例:

数组扁平化(这里只拍平一层)

var flattened = [[0, 1], [2, 3], [4, 5]].reduce(
 ( acc, cur ) => acc.concat(cur),
 [] //初始值,接下来将从第一个元素(索引0)开始遍历,如果不传则以第一个元素为初始累加值,从第二个值开始遍历
);
// [0, 1, 2, 3, 4, 5]

四、filter常见用法

filter顾名思义 过滤器,即筛选满足条件的元素组成一个新数组返回
MDN中是这样解释的:
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

1、使用

var newArray = arr.filter( callback (currentValue[, index [, array ] ] ){
//函数体
}[ , thisArg ] )

currentValue(必须):数组中当前正在处理的元素。
index(可选):正在处理的元素在数组中的索引。
array(可选):调用了 filter 的数组本身。
thisArg(可选):执行 callback 时,用于 this 的值。

返回值:一个新的、由通过测试的元素组成的数组,如果没有任何数组元素通过测试,则返回空数组。
如果为 filter 提供一个 thisArg 参数,则它会被作为 callback 被调用时的 this 值。否则,callback 的 this 值在非严格模式下将是全局对象,严格模式下为 undefined。

代码示例:

筛选排除所有较小的值
下例使用 filter 创建了一个新数组,该数组的元素由原数组中值大于 10 的元素组成。

function isBigEnough(element) {
  return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

总结

简单总结了一下,其实四个方法需要的参数都差不多,只需要记住reduce特殊一点就可以啦!其他的三个都是传递一样的参数!

在这里插入图片描述

例如:感谢大家花时间看到这里,希望大家有所收货,如果文章中存在不足,欢迎指出,一起交流一起进步!也欢迎大家关注点赞嘿嘿。这里仅仅简单介绍了API的简单使用,:更详细的了解可以参考MDN文档(可以点一点我!)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript数组有很多内置方法,可以操作和处理数据。以下是JavaScript数组的所有方法列表: 1. `concat()` - 连接两个或多个数组。 2. `copyWithin()` - 在数组内部将一段元素拷贝到另一个位置。 3. `entries()` - 返回一个迭代器对象,可以遍历数组所有的键值对。 4. `every()` - 检查数组中的所有元素是否满足一个条件。 5. `fill()` - 用静态值填充一个数组中的所有元素。 6. `filter()` - 通过指定条件过滤出符合条件的数组元素。 7. `find()` - 返回找到的第一个元素,满足条件。 8. `findIndex()` - 返回目标元素索引,满足条件。 9. `forEach()` - 遍历数组,对每个元素执行指定的操作。 10. `includes()` - 判断数组是否包含指定元素。 11. `indexOf()` - 返回指定元素第一个出现的位置索引。 12. `join()` - 连接数组元素,返回字符串。 13. `keys()` - 返回一个迭代器对象,可以遍历数组的键。 14. `lastIndexOf()` - 返回指定元素最后一次出现的位置索引。 15. `map()` - 遍历数组,对每个元素执行指定的操作,将结果放入新数组。 16. `pop()` - 删除数组最后一个元素。 17. `push()` - 在数组末尾添加一个或多个元素。 18. `reduce()` - 对数组中的每个元素执行指定的操作,累积计算并返回最终结果。 19. `reduceRight()` - 与reduce()方法类似,不过是从右到左遍历数组。 20. `reverse()` - 反转数组元素的顺序。 21. `shift()` - 删除数组的第一个元素。 22. `slice()` - 截取数组元素,返回新数组。 23. `some()` - 检查数组中是否存在至少一个元素满足一个条件。 24. `sort()` - 排序数组元素。 25. `splice()` - 删除、插入或替换数组中的元素。 26. `toString()` - 将数组转换成字符串。 27. `unshift()` - 在数组的开头添加一个或多个元素。 28. `valueOf()` - 返回数组本身。 以上方法中,有些方法会改变原数组,有些方法则不会。需要注意使用时,避免产生错误。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值