es array 方法

 
 
 
 
 
 
在 JavaScript (ES6+) 的演进中,数组(Array)引入了大量极具革命性的原生方法。这些方法让开发者彻底告别了传统的 for 循环,转向更优雅的函数式编程风格。
为了方便速查,我们将这些核心方法按照应用场景归类,并标注它们是否会改变原数组(现代开发中,推荐优先使用不改变原数组的纯函数方法)。

🔍 一、 查找与匹配(不再需要用 indexOf 绕弯子)
1. find() — 找出第一个符合条件的元素
  • 特性:返回元素本身。找不到返回 undefined。不改变原数组。
  • 示例:
    javascript
    const users = [{id: 1, name: '马良'}, {id: 2, name: '张三'}];
    const user = users.find(item => item.id === 1);
    console.log(user); // { id: 1, name: '马良' }
    请谨慎使用此类代码。
2. findIndex() — 找出第一个符合条件的元素的索引
  • 特性:返回索引数字。找不到返回 -1。不改变原数组。
  • 示例:
    javascript
    const idx = users.findIndex(item => item.id === 2);
    console.log(idx); // 1
    请谨慎使用此类代码。
3. includes() (ES7) — 检查数组是否包含某个值
  • 特性:直接返回 true/false。相较于旧的 indexOf,它能完美识别 NaN。不改变原数组。
  • 示例:
    javascript
    const arr = [1, 2, NaN];
    console.log(arr.includes(NaN)); // true
    请谨慎使用此类代码。

🔄 二、 转换与衍生(前后端数据交互的核心)
1. map() — 映射转换,加工每一个元素
  • 特性:根据回调函数生成一个全新的数组。不改变原数组。
  • 示例:
    javascript
    const nums =;
    const squares = nums.map(x => x * x); // [1, 4, 9]
    请谨慎使用此类代码。
2. filter() — 过滤筛选符合条件的元素
  • 特性:返回由符合条件的元素组成的新数组。不改变原数组。
  • 示例:
    javascript
    const ages =;
    const adults = ages.filter(age => age >= 18); // [19, 25]
    请谨慎使用此类代码。
3. reduce() — 累加/聚合器(功能最强悍的方法)
  • 特性:将数组的所有元素通过回调函数折叠/累加为一个单一的输出值(可以是数字、对象、甚至新数组)。不改变原数组。
  • 示例(求和):
    javascript
    const total = [1, 2, 3, 4].reduce((sum, current) => sum + current, 0); // 10
    请谨慎使用此类代码。
4. flatMap() (ES2019) — 先 map 再打平
  • 特性:遍历并执行 map 逻辑,随后自动将结果数组向下打平一层(类似结合了 mapflat(1))。不改变原数组。
  • 示例:
    javascript
    const sentences = ["hello world", "good morning"];
    const words = sentences.flatMap(s => s.split(" "));
    console.log(words); // ['hello', 'world', 'good', 'morning']
    请谨慎使用此类代码。

🛠️ 三、 状态校验
1. some() — 只要有一个满足就通过
  • 特性:只要数组中至少有一个元素让回调函数返回 true,整个方法就返回 true。中途匹配到会立即中断遍历。
  • 示例:
    javascript
    const hasNegative = [1, 5, -3, 8].some(x => x < 0); // true
    请谨慎使用此类代码。
2. every() — 必须全部满足才通过
  • 特性:只有数组中的所有元素都满足条件,才返回 true。一旦遇到不满足的立即中断。
  • 示例:
    javascript
    const allPositive = [1, 5, 3, 8].every(x => x > 0); // true
    请谨慎使用此类代码。

🧬 四、 静态实用方法(由 Array 构造函数直接调用)
1. Array.from() — 将伪数组转为真数组
  • 特性:可以将 Arguments、DOM 节点列表,或者前面提到的 SetMap 转换为真正的数组。
  • 示例:
    javascript
    const mySet = new Set([1, 2, 3]);
    const arr = Array.from(mySet); // [1, 2, 3]
    请谨慎使用此类代码。
2. Array.of() — 创建包含指定元素的新数组
  • 特性:解决 new Array(3) 会创建一个长度为3的空数组的怪异历史遗留问题。
  • 示例:
    javascript
    const arr = Array.of(3); // [3]
    请谨慎使用此类代码。

🥊 核心总结表:改不改变原数组?
方法名改变原数组吗?返回值典型用途
map / filter ❌ 否 新数组 数据清洗、UI 列表渲染映射
find / findIndex ❌ 否 元素本身 / 索引数字 寻找特定对象、数组更新定位
some / every / includes ❌ 否 布尔值 (true/false) 表单权限校验、状态前置拦截
reduce ❌ 否 任意类型(累加结果) 数组去重分类、复杂格式数据扁平化
push / pop / splice ⚠️ 改变后的数组长度 / 被删元素 传统队列/栈结构操作
你目前是在基于 React 等前端组件 做复杂列表数据的二次清洗映射,还是需要结合 Node.js (Koa) 进行大批量 JSON 数组的聚合与流式计算?如果对某个复杂的方法(例如 reduce 的高级用法)感兴趣,我可以为你编写对应的实战代码片段。
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

posted on 2026-09-21 14:09  漫思  阅读(6)  评论(0)    收藏  举报

导航