这个函数如何交换数组元素?

3
我在这里看到了一个函数,可以交换两个数组元素的位置,但我似乎无法理解它的工作原理。看起来好像使用了某种类型的数组解构(?)。我只是不明白为什么原始的 data 数组会被实际改变。
可以有人请解释一下这个是如何工作的吗?

const swap = (a, i, j) => {
  [a[i], a[j]] = [a[j], a[i]]  // ???
}

const data = [1, 2, 3, 4]

swap(data, 0, 2)

console.log(data)


该数组通过引用传递。因此,从技术上讲,您会修改原始数组。 - norbitrial
2
非常有趣。从未想过可以这样使用解构。就像当你的大脑意识到你可以使用 [a,b].includes(c) 来简写或语句一样。 - Taplar
1个回答

5

从右边开始:

[a[j], a[i]]

这将创建一个包含两个元素的新数组:第一个元素是索引为j的元素,第二个元素是索引为i的元素。
在左侧进行解构操作。
[a[i], a[j]] = 

那么这相当于以下内容:
a[i] = theNewArray[0];
a[j] = theNewArray[1];

由于这里正在进行变异操作a,因此对数组的任何引用都会感知到这些更改,所以data将“看到”这些更改。


谢谢,这解释得非常清楚。我没想到也可以将其结构分配给现有对象/数组属性。 - Đinh Carabus

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接