ZetCode

JavaScript copyWithin 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 copyWithin 方法复制数组元素。

复制数组元素

copyWithin 方法在同一个数组中复制一系列数组元素。它修改原始数组并返回修改后的数组。此方法不会更改数组的长度。

该方法最多接受三个参数:目标位置、起始索引和可选的结束索引。元素从起始索引复制到但不包括结束索引。如果省略,则结束索引默认为数组的长度。

此方法对于在数组内有效地移动元素而无需创建新数组很有用。它就地执行操作,使其对大型数组具有内存效率。负索引从数组的末尾开始计数。

基本的 copyWithin 示例

以下示例演示了 copyWithin 方法的基本用法。

main.js
const arr = [1, 2, 3, 4, 5];
arr.copyWithin(0, 3);

console.log(arr);

我们从索引 3 开始将元素复制到数组的开头。位置 0 和 1 处的原始元素将被覆盖。数组长度保持不变。

$ node main.js
[ 4, 5, 3, 4, 5 ]

使用起始和结束索引复制

copyWithin 方法可以指定用于复制的起始和结束索引。

main.js
const letters = ['a', 'b', 'c', 'd', 'e'];
letters.copyWithin(1, 2, 4);

console.log(letters);

我们将元素从索引 2 复制到 4(不包括 4)到位置 1。只有元素“c”和“d”被复制。位置 1 和 2 处的原始元素将被覆盖。

$ node main.js
[ 'a', 'c', 'd', 'd', 'e' ]

使用负索引

copyWithin() 方法接受从数组末尾开始计数的负索引。

main.js
const nums = [1, 2, 3, 4, 5];
nums.copyWithin(-2, -4, -1);

console.log(nums);

负索引从数组的末尾向后计数。在这里,我们从索引 -4 (1) 到 -1 (4) 复制元素到位置 -2 (3)。位置 3 和 4 处的原始元素将被覆盖。

$ node main.js
[ 1, 2, 3, 2, 3 ]

在数组的一部分内复制

copyWithin 方法可以定位数组的特定部分。

main.js
const colors = ['red', 'green', 'blue', 'yellow', 'purple'];
colors.copyWithin(2, 0, 2);

console.log(colors);

我们将前两个元素('red','green')复制到位置 2。位置 2 和 3 处的原始元素将被覆盖。数组长度保持不变。

$ node main.js
[ 'red', 'green', 'red', 'green', 'purple' ]

复制重叠范围

copyWithin 方法正确处理重叠范围。

main.js
const data = [1, 2, 3, 4, 5];
data.copyWithin(1, 0, 3);

console.log(data);

当源和目标范围重叠时,该方法会复制元素,就像首先复制到一个临时数组一样。在这里,元素 1、2、3 被复制到位置 1。位置 1、2 和 3 处的原始元素将被覆盖。

$ node main.js
[ 1, 1, 2, 3, 5 ]

来源

数组 copyWithin - 语言参考

在本文中,我们演示了如何使用 copyWithin() 方法在 JavaScript 中复制数组元素。

作者

我叫 Jan Bodnar,是一位对编程充满热情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。我拥有超过十年的编程教学经验。

列出 所有 JS 数组函数。