js 中 foreach,map,find,filter,reduce 的适用场景分别是哪些? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
yuan321

js 中 foreach,map,find,filter,reduce 的适用场景分别是哪些?

  •  
  •   yuan321 2022 年 5 月 12 日 3332 次点击
    这是一个创建于 1443 天前的主题,其中的信息可能已经有所发展或是发生改变。

    js 中 foreach,map,find,filter,reduce 的适用场景分别是哪些?他们的相同点和不同点又有哪些呢?

    18 条回复    2022-06-18 18:23:18 +08:00
    libook
        1
    libook  
       2022 年 5 月 12 日   1
    可以看 Reference 文档对比一下
    https://developer.mozilla.org/zh-CN/docs/Web/Javascript/Reference/Global_Objects/Array

    相同点只是用了迭代器,除此之外功能不一样;一项需求如果有现成方法就可以实现就直接用现成方法,没有的话再用需要加工数量最少的方法。

    比如你要把一个数组里的每一个元素加工后再生成另一个数组,你用 forEach 也可以实现,甚至用 for 循环,但都需要自己额外写一些代码,不如直接用 map 方便。
    Pastsong
        2
    Pastsong  
       2022 年 5 月 12 日
    English 啊 English
    molvqingtai
        3
    molvqingtai  
       2022 年 5 月 12 日
    可以分为两类,一种有副作用,一种是无副作用
    molvqingtai
        4
    molvqingtai  
       2022 年 5 月 12 日
    foreach 没有返回值,用于改变原数组或做一些其操作
    molvqingtai
        5
    molvqingtai  
       2022 年 5 月 12 日
    其他都是纯函数
    murmur
        6
    murmur  
       2022 年 5 月 12 日
    reduce 没用过,其余的都挺常用,数据处理,过滤下接口转个格式啥的
    AV1
        7
    AV1  
       2022 年 5 月 12 日   1
    // 单纯地遍历
    Array.prototype.forEach

    // 检测数组中否有元素符合条件
    Array.prototype.some

    // 检测数组中是否所有元素符合条件
    Array.prototype.every

    // 用来将一个列表转换成另一个等长的列表
    Array.prototype.map

    // 用来将一个列表转换成一个值
    Array.prototype.reduce

    // 从列表中找出符合条件的一个元素
    Array.prototype.find

    // 从列表中找出符合条件的若干元素
    Array.prototype.filter

    // 拍平列表
    Array.prototype.flat

    // map 和 flat 的结合,适合用来将一个列表转换成另一个不等长的列表
    Array.prototype.flatMap
    ethusdt
        8
    ethusdt  
       2022 年 5 月 12 日
    Reduce 的一共场景: https://v2ex.com/t/852210#reply6
    duduaba
        9
    duduaba  
       2022 年 5 月 12 日
    语法糖,for 循环变种,理解为 lodash 工具集封装就行
    Building
        10
    Building  
       2022 年 5 月 12 日
    ……我无语了,这么直白的英语,这么直白的函数,再不济一个个跑一遍也搞懂了吧
    luob
        11
    luob  
       2022 年 5 月 12 日
    会用 reduce 就行了,其他的都相当于是 reduce 的语法糖
    callv
        12
    callv  
       2022 年 5 月 12 日 via iPhone
    7 楼正解。
    Envov
        13
    Envov  
       2022 年 5 月 12 日
    7 楼正解,这里有一个比较晦涩的 reduce ,很短,但是实现了 composeM
    Envov
        14
    Envov  
       2022 年 5 月 12 日
    lmshl
        15
    lmshl  
       2022 年 5 月 12 日
    foreach
    我想把所有元素都过一遍(比如,控制台打印所有元素)
    map
    我想把所有元素都改成另一个样(比如,给所有字符串末尾加一个逗号)
    find
    我想从数组中找符合我要求的第一个元素(比如,从用户数组中找第一个符合条件的用户)
    filter
    我想剔除部分元素,仅保留我需要的元素(比如,从用户数组中过滤掉非管理员用户)
    reduce
    我想把所有元素合并成一个元素(比如,对整数数组求和)
    Danswerme
        16
    Danswerme  
       2022 年 5 月 12 日
    @Envov 谢谢,成功烧死了一吨脑细胞,看了十分钟之后终于绕明白了。
    Mutoo
        17
    Mutoo  
       2022 年 5 月 13 日
    推荐一篇 FP 相关的文章,介绍了 transducer 和 reducer 相关的知识

    https://medium.com/@thi.ng/of-umbrellas-transducers-reactive-streams-mushrooms-pt-2-9c540beb0023
    AhECbt
        18
    AhECbt  
       2022 年 6 月 18 日
    简单理解:

    遍历自己,遍历成别人,查找,过滤,运算
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2822 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 111ms UTC 14:53 PVG 22:53 LAX 07:53 JFK 10:53
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86