最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 翻译 | 为何和何时在Javascript中使用forEach, map, filter, reduce 和 find。

    正文概述 掘金(K-Steve)   2020-12-21   370

    原文地址

    许多文章在讨论怎么在数组上使用.forEach(), .map(), .filter(), .reduce().find()。我认为解释何时使用这些通用数组方法是很有用的。

    .map(), .filter(), .reduce().find().forEach() 的用法很相似,现在先让我们只关注最后那个方法。

    什么是 forEach? 一种处理数组中元素的方法。

    如果你对数组方法 .forEach() 不熟悉,那么每当你想遍历一个数组时,你可能会立即想到 for 循环。

    .forEach() 只是一种不同的实现方法。下面两种代码实现了相同的事情。

    for loop

    var array = [1,2,3];
    for (var i = 0; i < array.length; i++){
      console.log(i);
    }
    

    forEach()

    var array = [1,2,3];
    array.forEach(function(i){
      console.log(i);
    });
    

    这两种方法微妙的不同可以对你的代码产生巨大的影响。

    为什么使用forEach? 简单易用

    对于我来说,使用forEach()来支持for循环最引人注目的原因是他的易用性。尽管这两个方法的代码数相似,但是forEach()需要的配置更少。

    使用寻常的 for 循环需要3步:

    1. 定义一个迭代器值:var i = 0;
    2. 定义一个结束点: i < array.length;
    3. 告诉循环怎样迭代;

    使用 .forEach() 你只需要简单的传入一个会被每个元素执行的方法。

    为什么使用 forEach? 作用域

    如果这些对你来说还不够的话... 使用.forEach() 支持 for 循环还有一个技术上的原因。与代码的作用域有关。

    当使用 .forEach() 时,传入了一个具有它自己作用域的函数。在 for 循环中,你正在污染循环中的作用域。大部分情况下(并非所有情况下),这是一个坏事。

    何时使用 forEach?

    .forEach() 你需要为每一个数组元素设置一个可执行的函数。良好的实践是应该使用 .forEach(), 当你不能使用其他数组方法来实现你的目标。我知道这听起来很模糊,但 .forEach() 是一个通用的工具...当你不能使用更专业的工具处理数组时再使用它。

    何时使用 map ?

    .map() 当你想 转换 数组中的元素时

    何时使用 filter ?

    .filter() 当你想从一个数组中 选出 多个元素作为一个子集时。

    何时使用 find ?

    .find() 当你想从数组中 选出 一个元素时。

    何时使用 reduce ?

    .reduce() 当你想从一个数组中的多个元素中 获得 一个值时。

    特性和批评

    forEach() 返回 undefined

    如果你希望转换整个数组,你可能会想使用 .map().map()返回数组是有用的,因为可以使用它链接其他数组方法。

    Example:

    const arr = [1,2,3];
    const transformedArr = arr.map(function(){}).filter(function(){});
    

    关于性能的一些话

    一个最大的批评就是 .forEach() 的运算速度。

    在现实中,你不应该使用 .forEach() 除非其他方法像 .map()不能完成需求。 事实上.map()在速度上要略快于 .forEach()

    坦白的讲,.forEach().map() 要慢于原生的 for 循环。但仅仅根据执行速度的快慢去判断是否使用这个方法是目光短浅的。这个观点完全忽略了代码的易读性和作用域。

    这里的关键点是,不要因为你认为for循环更快而使用它,而是在你知道需要的时候使用它。


    起源地下载网 » 翻译 | 为何和何时在Javascript中使用forEach, map, filter, reduce 和 find。

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元