当前位置: 首页 > 新闻动态 > 网络资讯

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

作者:幻影之瞳 浏览: 发布日期:2026-01-31
[导读]:高频必会且易错的JavaScript数组方法中,push()、pop()、shift()、unshift()、splice()、reverse()、sort()会直接修改原数组;map()、filter()、reduce()不修改原数组,返回新数组或值;浅拷贝推荐[...arr],查元素优先用includes(),对象数组查字段用some()。
高频必会且易错的JavaScript数组方法中,push()、pop()、shift()、unshift()、splice()、reverse()、sort()会直接修改原数组;map()、filter()、reduce()不修改原数组,返回新数组或值;浅拷贝推荐[...arr],查元素优先用includes(),对象数组查字段用some()。

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()(虽也能用,但意图不明确)。

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

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

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

  • 只需判断存不存在 → 用 arr.includes(val

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

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

免责声明:转载请注明出处:http://m.lexweb.cn/news/786076.html

扫一扫高效沟通

多一份参考总有益处

免费领取网站策划SEO优化策划方案

请填写下方表单,我们会尽快与您联系
感谢您的咨询,我们会尽快给您回复!