JavaScript数组遍历中获取上一个值需手动通过索引访问前一项,for循环从索引1开始最直接;forEach等方法需用index-1判断;for...of需额外变量缓存但易出错;reduce适合累积处理如计算相邻差值。

在 JavaScript 数组遍历中,要获取当前元素的“上一个值”,关键不是靠遍历方法本身提供,而是**利用索引(index)手动访问前一项**。绝大多数内置遍历方法(如 forEach、map、for...of)不直接暴露上一个元素,但都提供当前索引或可通过传统 for 循环控制访问。
用 for 循环 + 索引访问前一项
这是最直接、最可控的方式。从索引 1 开始遍历,这样 i - 1 始终合法(指向第一个元素及之后的前一项):
- 适用场景:需要稳定、清晰地对比相邻元素,比如计算差值、去重相邻重复项、滑动窗口等
-
写法示例:
const arr = [10, 20, 30, 40]; for (let i = 1; i < arr.length; i++) { const current = arr[i]; const prev = arr[i - 1]; // ✅ 安全获取上一个值 console.log(`当前: ${current}, 上一个: ${prev}`); } // 输出:当前: 20, 上一个: 10;当前: 30, 上一个: 20;当前: 40, 上一个: 30
在 forEach / map 中通过 index 参数获取上一个值
forEach 和 map 的回调函数第三个参数是数组本身,第二个是索引,因此也能安全访问 arr[index - 1] ——但要注意边界(索引为 0 时没有上一个):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
需判断索引是否大于 0,否则
arr[-1]是undefined -
写法示例:
const arr = ['a', 'b', 'c']; arr.forEach((item, index, array) => { if (index > 0) { const prev = array[index - 1]; console.log(`"${item}" 的上一个是 "${prev}"`); } else { console.log(`"${item}" 是第一个,无上一个`); } });
避免 for...of 中直接获取上一个值
for...of 只提供当前值,不提供索引或原数组引用,**无法直接拿到上一个值**。强行实现需额外变量记录上一项,但逻辑易出错(尤其首次迭代):
立即学习“Java免费学习笔记(深入)”;
- 不推荐用于依赖“上一个”的场景;若坚持使用,可这样临时缓存:
let prev; for (const current of arr) { if (prev !== undefined) { console.log(`当前: ${current}, 上一个: ${prev}`); } prev = current; // 更新为下一轮的“上一个” }-
注意:该方式无法在第一次循环中访问上一个值,且
prev是副作用变量,可读性较低
进阶:用 reduce 模拟带“上一个”的处理流
如果目标是生成新数组或累积结果(如两两求和),reduce 更自然:
- 把上一个值作为累加器(accumulator)的一部分传递下去
-
写法示例(生成相邻差值数组):
const arr = [5, 8, 12]; const diffs = arr.reduce((acc, current, i) => { if (i === 0) return acc; // 跳过第一个 acc.push(current - arr[i - 1]); return acc; }, []); console.log(diffs); // [3, 4]

















