js 数组处理的常用方法
内容提要
本文介绍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() 方法也将数组转换为逗号分隔的字符串。