news 2026/10/27 4:48:44

副队长JavaScript教程(34)-数组的查找截取拼接排序

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
副队长JavaScript教程(34)-数组的查找截取拼接排序

点此查看所有教程、项目、源码导航

文章目录

  • 1. 背景
  • 2. 查找相关:indexOf、includes
    • 2.1 indexOf ():查找元素下标
    • 2.2 includes ():判断元素是否存在
  • 3. 截取:slice ()
  • 4. 拼接:concat ()
  • 5. 翻转与排序:reverse、sort
    • 5.1 reverse ():数组翻转
    • 5.2 sort ():数组排序
  • 6. 方法汇总对比
  • 7. 小结

1. 背景

上一篇我们学习了数组增删相关的内置函数:push、pop、unshift、shift、splice。
它们有一个共同特点:执行之后会直接修改原来的数组。

本篇再来学习另一组常用数组功能:查找、截取、拼接、排序,包含indexOf、includes、slice、concat、reverse、sort。

同样先说明:这些本质也是 JS 内置好的函数。现阶段大家不用死记硬背全部参数细节,只需要熟悉每个方法能干什么,有个印象就足够。等到实际开发需要使用的时候,再来查阅资料核对参数,是完全正常的学习和开发方式。

和上一组增删方法不一样,这里大部分方法不会改动原数组,处理之后会返回一个新数组或者结果。这是我们使用时需要重点留意的区别。

2. 查找相关:indexOf、includes

2.1 indexOf ():查找元素下标

作用:在数组中查找指定元素,找到就返回它对应的下标;如果数组里面不存在这个元素,返回-1。

letfruitArr=["苹果","香蕉","橙子"];console.log(fruitArr.indexOf("香蕉"));// 1console.log(fruitArr.indexOf("葡萄"));// -1

小提示:它只会找到第一个匹配元素的下标,后面相同元素不会继续查找。

2.2 includes ():判断元素是否存在

作用:判断数组里有没有这个元素,结果只有两种:找到返回true,找不到返回false。
如果我们只关心 “有没有”,不关心在哪个下标,优先使用includes,可读性更好。

letfruitArr=["苹果","香蕉","橙子"];console.log(fruitArr.includes("橙子"));// trueconsole.log(fruitArr.includes("葡萄"));// false

3. 截取:slice ()

slice用来截取数组的一部分,返回截取出来的新数组。
重点:slice 不会修改原数组!

语法:

arr.slice(起始下标,结束下标)

规则:包含起始下标,不包含结束下标。第二个参数省略时,默认截取到数组末尾。

letfruitArr=["苹果","香蕉","橙子","葡萄"];// 从下标1开始,截取到下标3(不包含下标3)letnewArr=fruitArr.slice(1,3);console.log(newArr);// ["香蕉", "橙子"]console.log(fruitArr);// 原数组不变 ["苹果", "香蕉", "橙子", "葡萄"]

4. 拼接:concat ()

concat可以把多个数组合并在一起,返回拼接完成后的新数组,原数组保持不变。

letarr1=[10,20];letarr2=[30,40];letarr3=[50];letnewArr=arr1.concat(arr2,arr3);console.log(newArr);// [10,20,30,40,50]console.log(arr1);// 原数组不变 [10,20]

5. 翻转与排序:reverse、sort

5.1 reverse ():数组翻转

作用:把数组里面元素顺序颠倒,这个方法会修改原数组。

letnumArr=[10,20,30];numArr.reverse();console.log(numArr);// [30, 20, 10]

5.2 sort ():数组排序

sort用来给数组排序,默认规则是按照字符串编码排序,这里有一个初学者高频踩坑点。

letnumArr=[2,11,5];numArr.sort();console.log(numArr);// [11, 2, 5]

可以看到直接写 sort,数字排序结果不符合我们预期。

数字正确排序写法现阶段先做了解。

letnumArr=[2,11,5];numArr.sort(function(a,b){returna-b;});console.log(numArr);// [2, 5, 11]

注意:这里用到了自定义函数,通过函数来指定一个排序的具体方式,我们暂时不深究原理,先记住这个坑即可,后面学完函数再回头理解。

6. 方法汇总对比

  • indexOf:查找元素下标,找到返回下标,找不到返回 - 1
  • includes:判断元素是否存在,返回布尔值 true /false
  • slice:截取一段数组,返回新数组,不修改原数组
  • concat:拼接多个数组,返回新数组,不修改原数组
  • reverse:翻转数组顺序,会修改原数组
  • sort:数组排序,默认按字符排序,数字排序需要额外写法,会修改原数组

7. 小结

  • 查找、截取、拼接、排序是开发中非常高频的数组操作;
  • 区分关键点:大部分方法返回新数组、不改动原数组,但是 reverse 和 sort 会直接修改原数组;
  • sort 默认排序是字符串规则,数字直接排序会有异常,这个坑可以先记下来;
  • 再次强调:不需要死记每一个参数。大家只要知道有这些能力,等到写代码遇到对应的场景,再去查阅资料核对用法就完全没问题。
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/27 4:47:51

从发质判断到发根支撑:一套完整的马尾造型实操指南

一个“ponytail”能写出什么门道来?说实话,很多人的马尾就是随手一抓、皮筋一绑,能扎上不掉就完事。但你要是仔细观察那些街上回头率高的姑娘,她们的马尾往往并不是“随意”扎出来的——发根高度、贴头皮还是蓬松、发尾是直是弯、…

作者头像 李华
网站建设 2026/10/27 4:47:46

Linux进程切换与调度机制深度解析

1. 进程切换与调度的本质理解在Linux系统中,进程切换(Context Switch)和调度(Scheduling)是操作系统最核心的机制之一。简单来说,这就是操作系统如何在有限的CPU资源上"轮流"运行多个程序的艺术。…

作者头像 李华
网站建设 2026/10/27 4:47:28

前端开发者必备:批量提取表单字段名技巧

1. 为什么前端开发者需要批量提取表单字段名?在日常开发中,我们经常遇到需要快速获取页面表单字段的场景。比如接手一个遗留项目时,需要了解表单结构;或者在进行自动化测试时,需要获取所有表单字段的标识符。手动一个个…

作者头像 李华
网站建设 2026/10/27 4:46:47

3D超写实数字人与AI SaaS如何重塑直播电商

1. 数字人直播技术的行业变革最近几年,虚拟数字人技术正在快速渗透到直播电商领域。作为这个赛道的深度参与者,我亲眼见证了从最初的2D卡通形象到如今3D超写实数字人的技术跃迁。上海禛好智能科技最新发布的数字人直播解决方案,通过3D超写实与…

作者头像 李华
网站建设 2026/10/27 4:46:46

HDFS数据跨集群访问新思路:NFS网关挂载与调优实战

HDFS 里的数据要跨集群、跨机房搬来搬去,很多人第一反应是 distcp 或者干脆写个 Spark 任务读出来再写出去。这两种做法都能跑通,但代价不小:distcp 适合大批量离线迁移,跑一次动辄几十分钟起步;写代码读写的方案更灵活…

作者头像 李华
网站建设 2026/10/27 4:46:29

Java构建轻量级AI Agent的架构设计与实践

1. 项目背景与核心目标去年在开发企业级知识管理系统时,我遇到了一个典型困境:业务部门需要能自主决策的智能助手,但现有框架要么过度依赖Python生态,要么需要复杂的基础设施支持。这促使我开始探索用纯Java构建轻量级AI Agent的方…

作者头像 李华