概念
Array.prototype.copyWithin方法复制数组的一部分到当前数组的另一个位置,并返回修改后的数组。
语法
arr.copyWithin(index)
arr.copyWithin(index, start)
arr.copyWithin(index, start, end)
参数
index 参照索引位置。
start 替换的起始位置,默认是0。
end 替换的结束位置,默认是数组长度。
返回值
返回修改后的数组。
描述
当索引是自然数时,从数组的起始位置向末尾位置依次访问。 当索引是负数时,从数组的末尾位置向起始位置依次访问。
例子
例一、
let arr = ['前', '端', '咖', '手', '册'];
let result = arr.copyWithin(1);
console.log(arr); // ['前', '前', '端', '手', '册'];
console.log(arr === result); // true
// 等价于
arr.copyWithin(1, 0, arr.length);
0 | 1 | 2 | 3 | 4 |
前 | 端 | 咖 | 手 | 册 |
前 | 咖 | 手 | 册 |
例二、
let arr = ['前', '端', '咖', '手', '册'];
let result = arr.copyWithin(1, 2);
console.log(arr); // ['前', '咖', '手', '册', '册']
console.log(arr === result); // true
// 等价于
arr.copyWithin(1, 2, arr.length);
0 | 1 | 2 | 3 | 4 |
前 | 端 | 咖 | 手 | 册 |
咖 | 手 | 册 |
例三、
let arr = ['前', '端', '咖', '手', '册'];
let result = arr.copyWithin(1, 2, 3);
console.log(arr); // ['前', '咖', '咖', '手', '册']
console.log(arr === result); // true
0 | 1 | 2 | 3 | 4 |
前 | 端 | 咖 | 手 | 册 |
咖 |
例四、
let arr = ['前', '端', '咖', '手', '册'];
let result = arr.copyWithin(-3);
console.log(result); // ['前', '端', '前', '端', '咖']
// 等价于
console.log(arr.copyWithin(2, 0, arr.length)); // ['前', '端', '前', '端', '咖']
例五、
let arr = ['前', '端', '咖', '手', '册'];
let result = arr.copyWithin(-3, -1);
console.log(result); // ['前', '端', '册', '手', '册']
// 等价于
console.log(arr.copyWithin(2, 4, arr.length)); // ['前', '端', '册', '手', '册']
实现 copyWithin 方法
if(!Array.prototype.copyWithin){
Array.prototype.copyWithin = function (index, start, end) {
if (index === undefined) {
index = 0;
}
if (index < 0) {
index = index + this.length;
}
index = Math.floor(index);
if (start === undefined) {
start = 0;
}
if (start < 0) {
start = start + this.length;
}
start = Math.floor(start);
if (end === undefined) {
end = this.length;
}
if (end < 0) {
end = end + this.length;
}
end = Math.floor(end);
let copyArr = [];
for (let i = 0; i < this.length; i++) {
copyArr.push(this[i]);
}
let count = 0;
for (let i = 0; i < this.length; i++) {
if (index <= i && start + count < end) {
this[i] = copyArr[start + count];
count++;
}
}
retun this;
};
}
前端咖小程序
![](https://i-blog.csdnimg.cn/blog_migrate/d52b586eb59b619de76b0017f05c7592.jpeg)