在无序 JavaScript 数组中更快地删除元素

Array.prototype.splice() 是从数组中删除元素最常用的方法。然而,事实证明它并不是最快的方法。如果你在处理大型数组时执行了许多操作,这可能是影响代码性能的一个重要因素。

有一个非常简单的技巧可以加速这个操作,但是数组中元素的顺序不能起作用。如果后者为真,你可以交换数组中的两个元素而不会出现任何问题。这意味着你可以将任何元素与最后一个元素交换位置。但是使用 Array.prototype.pop() 来删除最后一个元素非常简单和快速,所以你可以利用这一点。例如:

const arr = [3, 1, 5, 7, 9];  // 要删除的元素是 5(索引:2)

arr[2] = arr[arr.length -1];  // 将最后一个元素复制到第三个位置
arr.pop();                    // 删除最后一个元素

在这个例子中,我们想要删除数组中间的一个元素。我们首先要做的是将要删除的元素与最后一个元素交换位置。然而,我们不需要实际交换它们。我们只需要确保最后一个元素放在我们要删除的位置上。我们可以简单地将它复制到该位置,然后使用 Array.prototype.pop() 来删除最后一个元素。

顺便说一下,有人可能认为将这个简化为 arr[i] = arr.pop() 会使它更简洁。事实证明这并不是这样,因为如果我们尝试删除数组中的最后一个元素,这个更短的版本将失败。