js 数组处理的常用方法

💡 原文中文,约6300字,阅读约需15分钟。
📝

内容提要

本文介绍JavaScript数组常用方法:push/unshift添加元素,pop/shift删除元素;splice增删替换(改变原数组),slice截取(不改变原数组);reverse/sort排序;concat及展开符合并数组;forEach/some/every/map/filter遍历处理;keys/values/entries迭代;indexOf/lastIndexOf/find/findIndex/includes搜索;join/toString转字符串。

🔎

延伸解读

注意会改变原数组的方法

文中明确提到 push、unshift、pop、shift、splice、reverse、sort 都会直接修改原数组,而 slice、concat、map、filter 等则返回新数组。实际开发中,若后续还要使用原数组,应优先选择不改变原数组的方法,或在操作前先复制一份,避免意外修改导致数据错乱。

splice 与 slice 容易混淆

两者名称相近但行为不同:splice 用于添加、删除或替换元素,会改变原数组,且第二个参数表示删除个数;slice 仅截取从 start 到 end 的部分,不改变原数组。文中 slice 示例代码误写成了 splice,阅读时需留意这一笔误,实际使用时按方法定义区分。

遍历与搜索方法的选择

forEach 适合单纯遍历但无法用 return 或 break 提前跳出;some 和 every 可在条件满足时提前终止,分别用于“是否存在”和“是否全部满足”。查找元素时,indexOf 返回位置或 -1,find 返回第一个符合条件的元素或 undefined,includes 直接返回布尔值,应根据需要的结果类型选用。

sort 默认排序的局限

文中示例对数字数组使用默认 sort 得到 [1,2,4,9],但默认排序是按字符串规则比较,多位数字可能出现非预期顺序。文章也展示了传入比较函数实现降序的方式,说明需要自定义排序规则时应显式传入回调,而不是依赖默认行为。

❓

Q&A

JavaScript 中向数组添加元素有哪些常用方法?

push() 向数组末尾添加一个或多个元素,返回新长度;unshift() 向数组开头添加一个或多个元素,返回新长度。

splice 和 slice 有什么区别?

splice() 用于添加或删除数组元素,会改变原数组;slice() 用于截取数组的一部分,不改变原数组。

如何对数组进行排序和反转?

reverse() 颠倒数组中元素的顺序,会改变原数组;sort() 对数组进行排序,可传入比较函数自定义规则,也会改变原数组。

some 和 every 方法有什么不同?

some() 检测数组中是否至少有一个元素满足条件,有一个满足即返回 true 并停止遍历;every() 检测是否所有元素都满足条件,全部满足才返回 true,否则返回 false。两者都不改变原数组。

map 和 filter 方法分别有什么作用?

map() 对数组中的每个元素进行处理,并返回一个新数组;filter() 创建一个新数组,包含所有通过条件检查的元素。两者都不改变原数组。

如何在数组中查找元素?

可以使用 indexOf() 返回元素首次出现的索引,lastIndexOf() 返回最后一次出现的索引,find() 返回第一个符合条件的元素,findIndex() 返回第一个符合条件的元素的索引,includes() 判断是否包含某个值。

如何将数组转换为字符串?

join() 方法将数组所有元素连接成一个字符串,可指定分隔符,默认用逗号;toString() 方法也将数组转换为逗号分隔的字符串。

🏷️

标签

➡️

继续阅读