📜  JavaScript数组copyWithin()(1)

📅  最后修改于: 2023-12-03 15:01:48.748000             🧑  作者: Mango

JavaScript数组copyWithin()

在JavaScript中,有一种通用工具方法叫做copyWithin(),可以将数组内的一些元素复制到其他位置,并修改它们的值,如下所示:

用法
array.copyWithin(target, start/*, end*/)
  • target(必填): 以这个位置开始替换数据,即从target位置开始复制。
  • start(必填): 从此位置开始读取数据,默认值为0。
  • end(可选): 到此位置前停止读取数据,默认值为length
// 示例代码
const arr = [1, 2, 3, 4, 5];
arr.copyWithin(0, 3, 4);
console.log(arr); // [4, 2, 3, 4, 5]

在以上示例中,copyWithin()方法的作用是将数组arr中从索引为3的位置开始到位置为4的元素复制到数组的前面。因此,arr[0]的值为arr[3]的值,即4。

返回值

该方法会改变原始数组,并返回修改后的数组,如下所示:

const arr = [1, 2, 3, 4, 5];
const res = arr.copyWithin(0, 3, 4);
console.log(arr); // [4, 2, 3, 4, 5]
console.log(res); // [4, 2, 3, 4, 5]
解析

copyWithin()方法的实现是非常简单的,只需确定源和目标的起始和结束位置,之后通过循环读取源数组的元素,并将其复制到目标位置即可。具体实现可参考以下示例代码:

Array.prototype.copyWithin = function(target, start, end = this.length) {
  let count = 0;
  for (let i = target; i < end; i++) {
    this[i] = this[start + count];
    count++;
  }
  return this;
}

因此,copyWithin()的时间复杂度为O(n),空间复杂度为O(1)。此外,该方法不会改变数组长度,因此元素删除后的空洞将保留。

总结

copyWithin()是JavaScript数组提供的一种非常实用的方法,它可以极大地方便我们在数组中的复制和替换操作。在使用时,需要理解它的三个参数含义,以及其具体实现原理。同时,需要注意该方法会改变原始数组。