还在 for 循环?这七个数组方法不懂,别说你懂 JavaScript

真正高效的 JS 开发者会让语言替你干活。现代 JavaScript 自带一批强力的数组方法,能替换初学者式的遍历,让代码更短、更清晰、更可读。

很多开发者把命都交给了 for 循环。可如果你还像 2010 年那样遍历数组,你就在浪费代码与时间。

真正高效的 JS 开发者会让语言替你干活。现代 JavaScript 自带一批强力的数组方法,能替换初学者式的遍历,让代码更短、更清晰、更可读。

我不是在说人人都会的 map() / filter()——下面这些被低估的方法,常能把你的代码量直接砍半。

1) .at() —— 按索引拿元素(支持负数从末尾取)

旧写法:

const arr = [10, 20, 30, 40];
const last = arr[arr.length - 1];

新写法:

const last = arr.at(-1);

    要点: 负索引从尾部计数,更直观。

    2) .findLast() —— 从尾部开始找最后一个匹配项

    旧写法:

    const nums = [2, 4, 7, 4, 9];
    const lastEven = nums.reverse().find(n => n % 2 === 0);

    新写法:

    const lastEven = nums.findLast(n => n % 2 === 0);

      优点: 无需 reverse() 与中间数组,直接到答案。

      3) .findLastIndex() —— 需要索引时用它

      旧写法:

      const nums = [1, 3, 7, 3, 9];
      const lastIndex =
        nums.length - 1 - [...nums].reverse().findIndex(n => n === 3);

      新写法:

      const lastIndex = nums.findLastIndex(n => n === 3);

        结果: 可读、直接、没“反向索引”脑筋急转弯。

        4) .flat() —— 一行拍平嵌套数组

        旧写法:

        const nested = [1, [2, [3, 4]]];
        const flat = nested.reduce((acc, val) => acc.concat(val), []);

          新写法:

          const flat = nested.flat(2);

            技巧: 传入深度(如 2),或用 flat(Infinity) 完全拍平。

            5) .flatMap() —— 映射 + 拍平,一步到位

            旧写法:

            const arr = [1, 2, 3];
            const doubled = arr.map(x => [x, x * 2]).flat();

            新写法:

            const doubled = arr.flatMap(x => [x, x * 2]);

            好处: 链更短、更快、更易读。

            6) .toSorted() —— 不变更原数组的排序

            旧写法:

            const arr = [3, 1, 2];
            const sorted = [...arr].sort((a, b) => a - b);

            新写法:

            const sorted = arr.toSorted((a, b) => a - b);

              意义: 返回排序后的新数组,不污染原数据,更函数式、更安全。

              7) .toReversed() —— 无副作用的反转

              旧写法:

              const arr = [1, 2, 3];
              const reversed = [...arr].reverse();

              新写法:

              const reversed = arr.toReversed();

                场景: 纯函数/不可变数据流,不再担心被意外改动。

                💡 组合技:这些方法一起用效果更佳

                const users = [
                  { name: 'Alice', active: false },
                  { name: 'Bob', active: true },
                  { name: 'Carol', active: true }
                ];
                
                // 获取“最后一个活跃用户”的名字
                const lastActive = users
                  .filter(u => u.active)
                  .map(u => u.name)
                  .toReversed()
                  .at(0); // 'Carol'

                再给几点小贴士:

                • 想不变更原数组时,优先用 toSorted() / toReversed(),少用会修改原数组的 sort() / reverse()。
                • 需要从尾部找元素或索引,直接用 findLast() / findLastIndex(),避免 reverse() 带来的副作用与拷贝成本。
                • 处理嵌套结构时,别忘了 flat() / flatMap(),常比 reduce + concat 更高效易读。

                把这篇收藏一下,然后切回 VS Code 试一遍。写更少,更清晰,更现代的 JavaScript。

                AI大模型学习福利

                作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

                一、全套AGI大模型学习路线

                AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

                因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获取

                二、640套AI大模型报告合集

                这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

                因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

                三、AI大模型经典PDF籍

                随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。


                因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

                四、AI大模型商业化落地方案

                因篇幅有限,仅展示部分资料,需要点击文章最下方名片即可前往获

                作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量

                评论
                添加红包

                请填写红包祝福语或标题

                红包个数最小为10个

                红包金额最低5元

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

                抵扣说明:

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

                余额充值