javascript如何操作数组_数组方法如何使用【教程】

JavaScript数组方法核心是分清修改原数组(如push、sort)与返回新数组(如map、filter),避免状态意外变更;注意find/findIndex边界行为、异步操作陷阱及链式调用类型安全。

javascript如何操作数组_数组方法如何使用【教程】

JavaScript 数组方法不是“学一堆 API”,而是理解哪些操作该用哪个方法、为什么不能乱换、以及哪些看似能用实则埋雷。

修改原数组 vs 返回新数组必须分清

这是最常踩的坑:比如 push()concat() 都能加元素,但前者改原数组,后者返回新数组;sort() 默认按字符串排序且直接改原数组,slice() 不动原数组只切片。混淆会导致状态意外变更,尤其在 React 或 Vue 的响应式场景里出问题。

  • pop() / push() / shift() / unshift() / splice() / sort() / reverse():全部直接修改原数组
  • map() / filter() / slice() / concat() / flat() / toSorted()(ES2024):不修改原数组,返回新数组
  • forEach() 不返回值(返回 undefined),别把它当 map()

find()findIndex() 的边界行为要小心

它们在找不到匹配项时分别返回 undefined-1,不是 false0。直接用 if (arr.find(...)) 判断会把 0''false 等 falsy 值误判为“没找到”。

  • 查是否存在 → 用 some()
  • 要索引 → 用 findIndex(),并显式判断是否等于 -1
  • 要第一个匹配对象 → 用 find(),但检查结果是否为 undefined,而不是用真值判断
  • 示例:const item = arr.find(x => x.id === 123); if (item !== undefined) { ... }

循环类方法里别乱用 async/await

map()forEach()filter() 这些方法本身不等待 Promise。写 arr.map(async item => {...}) 得到的是一堆 pending 的 Promise,不是你想要的结果数组。

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

  • 并发请求 → 用 Promise.all(arr.map(async item => {...}))
  • 想串行执行 → 用 for...of 循环 + await
  • forEach() 内部 await 无效,它不会暂停后续迭代
  • 错误写法:arr.forEach(async item => await fetch(item.url)); // 请求发出去了,但顺序和等待都失控

数组方法组合使用很常见,但链式调用前得确认每一步返回的是数组还是其他类型——find() 断掉链,reduce() 类型完全由初始值决定,这些地方一错就静默失败。

https://www.php.cn/faq/2019474.html

发表回复

Your email address will not be published. Required fields are marked *