侧边栏壁纸
博主头像
woku博主等级

成功的路上并不拥挤

  • 累计撰写 50 篇文章
  • 累计创建 13 个标签
  • 累计收到 3 条评论

copyWithin

woku
2021-11-15 / 0 评论 / 0 点赞 / 60 阅读 / 1,236 字

是什么?

Array.prototype上面的一个内置方法,是ES2015 es6版本中出现的

参数 copyWithin(target,start,end)

target:从第几位开始粘贴

start: 复制是从第几位开始

end: 复制是从第几位结束

[start,end) 注意:这个下标是含头不含尾

copyWithin对数组的各个元素进行重新排序,返回的是原数组的引用

相当于把数组的某几个元素复制,然后粘贴到某个位置

怎么用?

正常的使用场景

var arr = [1,2,3,4]
console.log(arr.copyWithin(0,1,3))  // [2,3,3,4]

把 2,3复制了一份,粘贴到了0的位置,长度为2,之前的1,2被覆盖。

几种特殊场景:

  • 如果没有start 则取整个数组元素(也就是从第0位开始到最后一位结束)

    var arr = [1,2,3,4]
    console.log(arr.copyWithin(2))  // [1,2,1,2]
    
  • start > len - 1 不发生任何变化

    var arr = [1,2,3,4]
    console.log(arr.copyWithin(0,5,2)) // [1,2,3,4]
    
  • end > len - 1 取到末尾

    var arr = [1,2,3,4]
    console.log(arr.copyWithin(0,1,5))  //[2, 3, 4, 4]
    
  • start 或 end 为负数 start+len end+len (len表示数组的长度,即arr.length)

    var arr = [1,2,3,4]
    console.log(arr.copyWithin(0,-3,-1)) 
    // -3 + 4 = 1   -1 + 4 = 3
    // 实际上就是arr.copyWithin(0,1,3) 
    // [2,3,3,4]
    

copyWithin 不改变数组长度
copyWithin 返回的是原数组的引用

当数组元素都是原始值

var arr = [1,2,3,4]
var newArr = arr.copyWithin(0,1,2)
console.log(newArr)  [2,2,3,4]
console.log(arr)     [2,2,3,4]
console.log(arr === newArr)  true

当数组元素是引用值

var objArr = [
    {
        id: 1
    }, {
        id: 2
    }, {
        id: 3
    }
]
var t1 = objArr[2]
var newObjArr = objArr.copyWithin(0, 2)  // 把下标为2的粘贴到了下标为0的地方
var t2 = newObjArr[0]  // 返回原数组的引用,newObjArr和objArr指向同一个地址
console.log(newObjArr)
console.log(t1 === t2)  // true 同一个引用地址

类数组也可以使用copyWithin

var arrLike = {
    0: 1,
    1: 2,
    2: 3,
    length: 3
}
var newArrLike = [].copyWithin.call(arrLike, 0, 1, 2)
console.log(newArrLike)
0

评论区