您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

ES6+ copyWithin()

在 ES5 中没有对数组内元素的复制和替换,如果要实现数组内的替换需要针对性的操作。而在 ES6 中提供了 copyWithin 轻易地实现数组内元素的复制,不会改变原数组的长度。

copyWithin 复制原数组指定的项,从 startend 之元素;然后替换原数组指定的位置,从 target 开始替换。原数组的长度不会被改变。

使用语法:

arr.copyWithin(target[, start[, end]])

参数解释:

当第参数是 0 或者没有参数时会复制整个数组,并从起始位置开始替换复制的数据。

var arr = [, , , , ];
arr.copyWithin();      // [1, 2, 3, 4, 5]
arr.copyWithin();       // [1, 2, 3, 4, 5]

上面的中,第参数是 0,会从第位置的元素开始复制整个数组,然后替换整个数组,所以数组没有变,0 可以省略不填。没有参数时认第参数是 0。当第参数大于 0时,看如下示例:

[, , , , ].copyWithin();      // [1, 2, 1, 2, 3]
[, , , , ].copyWithin();      // [1, 2, 3, 4, 5]

上面的中,第参数大于 0,复制整个数组从指定的位置替换,如果参数大于数组的长度时,则返回原数组。

var arr = [, , , , ];
arr.copyWithin(-);     // [1, 2, 3, 1, 2]

上面的中,参数小于 0 时,则从末尾开始计算起始替换的位置,在上面的例子中起始的位置的值是 3,则从此项开始替换。

第二个参数是,开始复制数组的起始位置,因为没有第三个参数,所以结尾是数组的最后一项。

var arr = [, , , , ];
arr.copyWithin(, );     // [4, 5, 3, 4, 5]

上面的中,起始位置是 3 则复制的数组是 [4, 5],替换的起始位置是 0,所以替换数组中的第一项和第二项的值。

var arr = [, , , , ];
arr.copyWithin(, -);     // [3, 4, 5, 4, 5]

上面的中,第二个参数是 - 3,start 将从末尾开始计算,会复制 [3, 4, 5],然后从数组的起始位置开始替换。

第三个参数是开始复制元素的结束位置,但是不这个位置。

var arr = [, , , , ];
arr.copyWithin(, , );     // [1, 4, 3, 4, 5]

上面的中,可以知道复制的元素是数组中的 4,然后从第二个元素开始替换。

[, , , , ].copyWithin(, , -);     // [1, 2, 3, 4, 5]
[, , , , ].copyWithin(, -, -);    // [4, 2, 3, 4, 5]

上面的中,第三个参数是负值,则从末尾开始计算。只有第三个参数是负数时,不会赋值任何元素,所以会返回原数组。这里要注意的是,在起始和结束位置之间有没有数据可以被复制,上面第二个例子,在 - 2 和 - 1 之间只有 4,所以会替换原数组中的起始位置的值。

本节讲解了数组的 copyWithin 的使用,主要注意的是在参数为负值的几种情况,特别是在起始和结束的参数为负值时,它们是从数组的结尾开始计算的,而且要看起始和结束之间有没有值可以被复制,如果没有则原数组中的元素不会被替换,则返回原数组。


联系我
置顶