我们经常需要对数组进行批量操作,比如填充数组元素或复制数组的一部分。ES6 为我们提供了两个非常方便的方法:fill()
和 copyWithin()
。fill()
用于将数组中的一部分或全部元素替换为指定的值,而 copyWithin()
用于在数组中复制元素并插入到新的位置。
适用场景
当你需要:
- 快速填充数组中的元素。
- 复制数组的一部分并将其移动到数组中的另一个位置。
fill() 方法详解
fill()
方法允许你将数组中的元素替换为一个指定的值。它的基本用法如下:
语法:
array.fill(value, start, end)
value
: 你想要填充的值。start
: 开始填充的位置(包含此位置)。如果不指定,默认从数组的开始位置(索引0)。end
: 结束填充的位置(不包含此位置)。如果不指定,默认填充到数组的末尾。
示例:
const zeroes = [0, 0, 0, 0, 0];
zeroes.fill(5); // 将整个数组填充为5
console.log(zeroes); // [5, 5, 5, 5, 5]
zeroes.fill(6, 3); // 从索引3开始填充为6
console.log(zeroes); // [0, 0, 0, 6, 6]
zeroes.fill(7, 1, 3); // 从索引1开始到索引3(不包括3)填充为7
console.log(zeroes); // [0, 7, 7, 0, 0]
zeroes.fill(8, -4, -1); // 从倒数第四个元素开始到倒数第二个元素填充为8
console.log(zeroes); // [0, 8, 8, 8, 0]
copyWithin() 方法详解
copyWithin()
方法用于在数组内部复制元素,并将它们插入到指定的起始位置。它的基本用法如下:
语法:
array.copyWithin(target, start, end)
target
: 插入复制内容的目标位置(包含此位置)。start
: 开始复制的位置(包含此位置)。如果不指定,默认从数组的开始位置(索引0)。end
: 结束复制的位置(不包含此位置)。如果不指定,默认复制到数组的末尾。
示例:
let ints = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
ints.copyWithin(5); // 从索引0开始复制到索引5的位置
console.log(ints); // [0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
ints.copyWithin(0, 5); // 从索引5开始复制到数组的开始位置
console.log(ints); // [5, 6, 7, 8, 9, 5, 6, 7, 8, 9]
ints.copyWithin(4, 0, 3); // 从索引0开始到索引3结束的内容复制到索引4的位置
console.log(ints); // [0, 1, 2, 3, 0, 1, 2, 7, 8, 9]
ints.copyWithin(-4, -7, -3); // 使用负索引值进行复制
console.log(ints); // [0, 1, 2, 3, 4, 5, 3, 4, 5, 6]