JavaScript交换数组两元素需校验索引合法性,再用解构赋值实现:先检查i、j是否在[0, arr.length)范围内,否则抛RangeError;再执行[arr[i], arr[j]] = [arr[j], arr[i]]。

JavaScript中交换数组两个元素的位置,核心在于避免直接赋值导致的数据覆盖或引用问题,关键是要用临时变量、解构赋值或内置方法安全地完成位置互换。
使用临时变量实现交换(最基础可靠)
适用于所有JavaScript环境,逻辑清晰,不易出错。需注意索引有效性检查,防止越界。
- 先校验两个索引是否在数组合法范围内(0 ≤ i 且 0 ≤ j )
- 用一个临时变量暂存其中一个元素值,再依次赋值
- 例如:交换索引 1 和 3 处的元素
let i = 1, j = 3;
if (i >= 0 && i = 0 && j const temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
利用数组解构赋值一行完成(ES6+ 推荐)
语法简洁,可读性强,本质仍是值交换,不依赖额外变量声明。同样需要索引合法性判断。
- 直接写成 [arr[i], arr[j]] = [arr[j], arr[i]]
- 该写法在大多数现代浏览器和Node.js环境中稳定支持
- 若索引无效,会得到 undefined,但不会报错;建议仍做边界检查
const i = 0, j = 2;
if (i in arr && j in arr) {
[arr[i], arr[j]] = [arr[j], arr[i]];
}
借助 splice 方法动态替换(适合不确定索引顺序场景)
利用 splice(start, deleteCount, item) 的特性,在指定位置插入新值并移除旧值,适合需要保持数组长度不变的交换逻辑。
立即学习“Java免费学习笔记(深入)”;
- 先取出两个目标元素,再按需用 splice 替换对应位置
- 注意 splice 会修改原数组,并返回被删除的元素数组,需合理处理返回值
- 相比前两种方式稍重,但更灵活,比如可结合查找函数动态定位元素
let idx1 = arr.indexOf('x');
let idx2 = arr.indexOf('z');
if (idx1 !== -1 && idx2 !== -1) {
const a = arr[idx1], b = arr[idx2];
arr.splice(idx1, 1, b);
arr.splice(idx2, 1, a);
}
封装为可复用函数(提升代码健壮性)
把交换逻辑抽离成函数,统一处理边界、类型和错误提示,便于多处调用和维护。
- 函数接收数组、起始索引、目标索引三个参数
- 内部做类型检查(是否为数组)、索引有效性验证、相等索引快速返回等优化
- 返回原数组(支持链式调用),也可考虑返回新数组以支持不可变操作
if (!Array.isArray(arr) || i === j) return arr;
if (i = arr.length || j = arr.length) {
throw new RangeError('Index out of bounds');
}
[arr[i], arr[j]] = [arr[j], arr[i]];
return arr;
}
// 使用:
swap(['red', 'green', 'blue'], 0, 2); // ['blue', 'green', 'red']











