如何在JavaScript中实现数组首尾对应元素交换?
问题分析与解决
你的代码运行后数组异常的核心问题是逻辑顺序错误:一边输入数组元素一边执行交换操作,而且初始化b时数组为空,vetor.length-1等于-1,直接导致刚输入的元素被undefined覆盖,最终数组内容异常。
正确实现思路
- 先完成所有元素的收集,把数组填满;
- 再单独执行首尾交换逻辑,循环只需跑数组长度的一半(避免重复交换)。
修正后的代码
// 第一步:收集所有20个元素 var vetor = []; for (var i = 0; i < 20; i++) { vetor[i] = Number(prompt("Digite um número: " + i)); } // 第二步:执行首尾对应交换 var temp; // 循环到数组中间即可,避免重复交换同一对元素 for (var i = 0; i < vetor.length / 2; i++) { // 计算当前索引对应的末尾配对索引 var endIndex = vetor.length - 1 - i; // 交换首尾元素 temp = vetor[i]; vetor[i] = vetor[endIndex]; vetor[endIndex] = temp; } alert(vetor);
关键细节说明
- 拆分操作阶段:输入元素和交换逻辑要分开,输入阶段只负责把用户输入的数值存入数组;
- 控制交换次数:比如长度为7的数组,只需要交换前3对(索引0和6、1和5、2和4),中间的索引3无需变动,和你给出的示例逻辑一致;
- 动态计算配对索引:
vetor.length -1 -i能精准匹配当前索引对应的首尾位置,避免初始化时的长度错误。
内容的提问来源于stack exchange,提问作者jojonso_
相关产品推荐
相关产品推荐

