javascript数组常用方法有哪些需要掌握【教程】

8次阅读

高频必会且易错的javaScript数组方法中,push()、pop()、shift()、unshift()、splice()、reverse()、sort()会直接修改原数组;map()、Filter()、reduce()不修改原数组,返回新数组或值;浅拷贝推荐[…arr],查元素优先用includes(),对象数组查字段用some()。

javascript数组常用方法有哪些需要掌握【教程】

javascript 数组方法很多,但真正日常开发中高频、必会、且容易出错的其实就那几个——掌握它们比背全 API 更重要。

哪些方法会直接修改原数组(mutating)?

这是最容易踩坑的地方:你以为生成了新数组,结果原数据被改了,后续逻辑全乱。

  • push()pop()shift()unshift():增删首尾元素,返回新长度或被删值,原数组变
  • splice():万能修改器(增、删、替),返回被删元素数组,原数组变 —— 尤其注意它和 slice() 拼写只差一个 p,行为天壤之别
  • reverse()sort():连顺序都给你翻过来或重排,原数组变 —— sort() 默认按字符串排序,[10, 2, 1] 会变成 [1, 10, 2],必须传 (a, b) => a - b

map()filter()reduce() 为什么几乎必用?

它们不改原数组,返回新数组/值,天然适配函数式思维和 react/vue 等框架的数据不可变要求。

  • map():一对一转换,比如 arr.map(x => x * 2);别用它来“遍历执行副作用”,那是 foreach() 的事
  • filter():返回满足条件的元素,注意返回值是布尔值,不是元素本身 —— arr.filter(x => x > 5),不是 arr.filter(x => return x > 5)
  • reduce():聚合计算,初学者常卡在累加器(acc)初始值上 —— 求和要写 arr.reduce((sum, x) => sum + x, 0),缺了 , 0 遇到空数组会报错

如何安全地“复制”一个数组?

浅拷贝就够了的场景下,别再用 arr.slice(0) 这种老写法,可读性差还容易误写成 slice()(虽也能用,但意图不明确)。

立即学习Java免费学习笔记(深入)”;

  • 推荐 [...arr](展开语法):简洁、直观、支持嵌套解构
  • 次选 Array.from(arr):兼容旧环境,还能顺便做映射,比如 Array.from(arr, x => x * 2)
  • 警惕 arr.concat():不传参时等价于浅拷贝,但语义模糊,新人看不懂;传空数组反而画蛇添足
  • 深拷贝?别用 jsON.parse(json.stringify(arr)) —— 丢函数、undefineddateregexp,且循环引用直接崩

查元素用 includes() 还是 indexOf()

二者用途不同,混用会导致 bug

  • 只需判断存不存在 → 用 arr.includes(value),返回 true/false,语义清晰,还支持 NaNindexOf(NaN) 永远返回 -1
  • 需要知道位置或进一步操作(比如删掉它)→ 用 arr.indexOf(value),返回索引,找不到是 -1
  • 对象数组查某字段?别硬套 includes() —— 它用的是严格相等(===),两个字面量对象永远不等;改用 some()arr.some(item => item.id === targetId)

真正难的不是记方法名,而是每次调用前下意识问一句:“这个操作会改原数组吗?”“我需要的是新数组还是原始索引?”—— 多问两次,调试时间少一半。

text=ZqhQzanResources