讲师中心 微信公众号
AI工具推荐 视频效率加速

如何用 JavaScript 递归安全地反转数组的一部分

胖浩酱_6654

胖浩酱_6654

发布时间:2026-01-21 18:05:08

|

960人浏览过

|

来源于php中文网

原创

如何用 JavaScript 递归安全地反转数组的一部分

本文详解如何通过递归实现数组局部反转,重点解决因基础条件未返回数组而导致的 undefined 问题,并提供健壮、可复用的递归反转方案。

在 JavaScript 中使用递归反转数组时,一个常见却容易被忽视的陷阱是:递归函数的每个分支(尤其是基础情况)都必须明确返回预期值。原代码中 reverseArrayHelper 在 left >= right 时仅执行 return;,这等价于 return undefined;,导致整个调用链最终返回 undefined,而非修改后的数组。

要修复这个问题,只需确保基础情况返回当前数组引用:

function reverseArrayHelper(left, right, arr) {
  if (left >= right) return arr; // ✅ 关键修复:返回 arr,而非 return;

  // 交换左右元素
  const temp = arr[left];
  arr[left] = arr[right];
  arr[right] = temp;

  return reverseArrayHelper(left + 1, right - 1, arr);
}

function reverseArray(arr, m) {
  return reverseArrayHelper(m + 1, arr.length - 1, arr);
}

console.log(reverseArray([1, 2, 3, 4, 5, 6], 3)); // [1, 2, 3, 6, 5, 4]

该函数从索引 m + 1 开始,反转子数组 arr[m+1 ... arr.length-1](即跳过前 m+1 个元素)。例如,输入 [1,2,3,4,5,6] 和 m=3,实际反转的是索引 4 到 5 的子段 [5,6]?不——注意:m+1 是 4,arr.length-1 是 5,因此反转的是 arr[4] 和 arr[5],即 [5,6] → [6,5],结果为 [1,2,3,4,6,5]。但示例输出是 [1,2,3,6,5,4],说明原意应为反转 m 之后的所有元素(含 m+1 起),而 m=3 对应第 4 个元素(0-indexed),即反转 [4,5,6] → [6,5,4],此时正确调用应为 reverseArrayHelper(3, arr.length - 1, arr)。因此,若目标是“反转索引 m 及之后的全部元素”,reverseArray 函数应修正为:

Java注释规范Skills
Java注释规范Skills

当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。

下载
function reverseArray(arr, m) {
  return reverseArrayHelper(m, arr.length - 1, arr); // ✅ 从索引 m 开始反转
}

此外,为增强鲁棒性,建议添加边界检查:

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

function reverseArray(arr, m) {
  if (!Array.isArray(arr) || arr.length === 0 || m < 0 || m >= arr.length) {
    return arr; // 或抛出错误:throw new Error('Invalid input');
  }
  return reverseArrayHelper(m, arr.length - 1, arr);
}

总结:

  • 递归函数必须保证所有路径(尤其 base case)返回一致类型(此处为 arr);
  • 明确反转范围的语义(m 表示起始索引还是分割点),避免逻辑偏差;
  • 原地修改数组时,返回 arr 即可,无需深拷贝——若需不可变操作,应在递归前创建副本:reverseArray([...arr], m)。

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

小橡皮AI

一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
length函数用法
length函数用法

length函数用于返回指定字符串的字符数或字节数。可以用于计算字符串的长度,以便在查询和处理字符串数据时进行操作和判断。 需要注意的是length函数计算的是字符串的字符数,而不是字节数。对于多字节字符集,一个字符可能由多个字节组成。因此,length函数在计算字符串长度时会将多字节字符作为一个字符来计算。更多关于length函数的用法,大家可以阅读本专题下面的文章。

1887

2023.09.19

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

12085

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

5527

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

2516

2025.12.25

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

100

2026.10.22

Gradle Wrapper配置教程
Gradle Wrapper配置教程

本专题介绍Gradle Wrapper的基本作用,涵盖文件组成、生成方法、版本配置和任务调用,帮助你理解项目如何使用指定的Gradle版本,减少不同开发环境带来的构建差异。

60

2026.10.22

Golangci-lint检查器使用教程
Golangci-lint检查器使用教程

本专题整理Golangci-lint常用Linters的用途与配置方法,覆盖错误处理、无效代码、安全、复杂度、命名和依赖检查,帮助项目合理选规则。

60

2026.10.22

Gradle怎么构建Java项目
Gradle怎么构建Java项目

本专题介绍Gradle Java项目构建方法,涵盖Java插件配置、依赖声明、源码编译、测试执行和打包检查,帮助你理解各阶段的任务关系,逐步完成项目构建。

20

2026.10.22

PHP时间戳漏洞修复教程
PHP时间戳漏洞修复教程

本专题汇总PHP常见时间戳漏洞,包括2038年溢出、时区漂移、时间戳伪造、重放攻击、时间盲注与日志审计失效等,并给出升级64位环境、使用 DateTimeImmutable、统一UTC、严格超时校验、预处理绑定、hash_equals 比对等修复方案,帮助开发者快速排查和加固时间相关代码。

60

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WebStorm 官方调试文档
WebStorm 官方调试文档

共0课时 | 0人学习

React 教程
React 教程

共58课时 | 12.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 6.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn