UNPKG

1.45 kBJavaScriptView Raw
1var isArray = require('./isArray')
2
3/**
4 * 浅复制数组的一部分到同一数组中的另一个位置,数组大小不变
5 *
6 * @param {Array} array 数组
7 * @param {Number} target 从该位置开始替换数据
8 * @param {Number} start 从该位置开始读取数据,默认为 0 。如果为负值,表示倒数
9 * @param {Number} end 到该位置前停止读取数据,默认等于数组长度。如果为负值,表示倒数
10 * @return {Array}
11 */
12function copyWithin (array, target, start, end) {
13 if (isArray(array) && array.copyWithin) {
14 return array.copyWithin(target, start, end)
15 }
16 var replaceIndex, replaceArray
17 var targetIndex = target >> 0
18 var startIndex = start >> 0
19 var len = array.length
20 var endIndex = arguments.length > 3 ? end >> 0 : len
21 if (targetIndex < len) {
22 targetIndex = targetIndex >= 0 ? targetIndex : len + targetIndex
23 if (targetIndex >= 0) {
24 startIndex = startIndex >= 0 ? startIndex : len + startIndex
25 endIndex = endIndex >= 0 ? endIndex : len + endIndex
26 if (startIndex < endIndex) {
27 for (replaceIndex = 0, replaceArray = array.slice(startIndex, endIndex); targetIndex < len; targetIndex++) {
28 if (replaceArray.length <= replaceIndex) {
29 break
30 }
31 array[targetIndex] = replaceArray[replaceIndex++]
32 }
33 }
34 }
35 }
36 return array
37}
38
39module.exports = copyWithin