如何利用数组解构赋值实现不使用中间变量交换数组特定索引值?
- 内容介绍
- 相关推荐
本文共计616个文字,预计阅读时间需要3分钟。
直接交换数组中两个元素的值,可以使用以下方法:
必须先确保索引有效
解构赋值本身不会校验索引是否越界。若 i 或 j 超出 [0, arr.length) 范围,右侧会取到 undefined,导致交换后出现 undefined 值,但不报错——这容易埋下隐患。
- 推荐检查方式:
i in arr && j in arr(兼容稀疏数组)或i >= 0 && i < arr.length && j >= 0 && j < arr.length - 错误示例:
let arr = [1,2]; [arr[0], arr[5]] = [arr[5], arr[0]];→ 结果变成[undefined, 2]
右侧必须是可迭代值
等号右边必须能生成一个数组(或类数组),不能是 null 或 undefined,否则抛 TypeError: undefined is not iterable。
本文共计616个文字,预计阅读时间需要3分钟。
直接交换数组中两个元素的值,可以使用以下方法:
必须先确保索引有效
解构赋值本身不会校验索引是否越界。若 i 或 j 超出 [0, arr.length) 范围,右侧会取到 undefined,导致交换后出现 undefined 值,但不报错——这容易埋下隐患。
- 推荐检查方式:
i in arr && j in arr(兼容稀疏数组)或i >= 0 && i < arr.length && j >= 0 && j < arr.length - 错误示例:
let arr = [1,2]; [arr[0], arr[5]] = [arr[5], arr[0]];→ 结果变成[undefined, 2]
右侧必须是可迭代值
等号右边必须能生成一个数组(或类数组),不能是 null 或 undefined,否则抛 TypeError: undefined is not iterable。

