什么是javascript数组_有哪些高阶函数方法

JavaScript数组高阶函数map、filter、reduce等定义在Array.prototype上,不修改原数组;map用于变换生成新数组,需返回值;filter筛选满足条件元素;reduce累积计算,建议传初始值;find/some/every/flatMap/includes等各司其职。

JavaScript 数组本身是对象,但它的高阶函数方法(如 map、filter、reduce)不是“数组的属性”,而是定义在 Array.prototype 上的可复用操作——它们不修改原数组,而是返回新数组或单个值,核心价值在于把数据处理逻辑抽象成声明式表达。

map 是什么?为什么不能直接 for 循环?

map 的本质是「对每个元素做变换,生成结构一致的新数组」。它强制你写一个纯函数(无副作用),这比手写 for 更易读、更易测、更少出错。

常见错误:忘记 return,导致新数组全是 undefined

它默认传入三个参数:currentValue、index、array,但多数场景只用第一个

箭头函数写法最简洁:[1,2,3].map(x => x * 2) → [2,4,6]

注意:如果回调里调用 parseInt 这类接受两个参数的函数(parseInt(str, radix)),map 会把 index 当作 radix 传进去,造成 ['1','2','3'].map(parseInt) 返回 [1, NaN, NaN]


filter 怎么筛数据?和 if + push 有啥区别?

filter 不是“过滤掉某些东西”,而是“选出所有满足条件的元素”。它返回一个新数组,长度 ≤ 原数组。

条件函数必须明确返回布尔值;返回假值(false、0、''、null、undefined、NaN)都会被丢弃

不会跳过空位(稀疏数组中未定义的索引仍会被调用,currentValue 是 undefined)

示例:[1,2,3,4,5].filter(n => n % 2 === 0) → [2,4]

别写成 arr.filter(Boolean) 来“去空值”——它会把 0、''、false 全干掉,这不是“去空”,是“去假值”


reduce 为什么总写不对?初始值到底要不要传?

reduce 是累积器,每次把上一轮结果和当前元素传给回调。它的难点不在语法,而在状态建模是否清晰。

posted @ 2026-01-22 16:49  老葩人  阅读(17)  评论(0)    收藏  举报