Blame view

node_modules/es5-ext/array/#/copy-within/shim.js 1.19 KB
aaac7fed   liuqimichale   add
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  // Taken from: https://github.com/paulmillr/es6-shim/
  
  "use strict";
  
  var toInteger         = require("../../../number/to-integer")
    , toPosInt          = require("../../../number/to-pos-integer")
    , validValue        = require("../../../object/valid-value")
    , objHasOwnProperty = Object.prototype.hasOwnProperty
    , max               = Math.max
    , min               = Math.min;
  
  module.exports = function (target, start /*, end*/) {
  	var arr = validValue(this)
  	  , end = arguments[2]
  	  , length = toPosInt(arr.length)
  	  , to
  	  , from
  	  , fin
  	  , count
  	  , direction;
  
  	target = toInteger(target);
  	start = toInteger(start);
  	end = end === undefined ? length : toInteger(end);
  
  	to = target < 0 ? max(length + target, 0) : min(target, length);
  	from = start < 0 ? max(length + start, 0) : min(start, length);
  	fin = end < 0 ? max(length + end, 0) : min(end, length);
  	count = min(fin - from, length - to);
  	direction = 1;
  
  	if (from < to && to < from + count) {
  		direction = -1;
  		from += count - 1;
  		to += count - 1;
  	}
  	while (count > 0) {
  		if (objHasOwnProperty.call(arr, from)) arr[to] = arr[from];
  		else delete arr[from];
  		from += direction;
  		to += direction;
  		count -= 1;
  	}
  	return arr;
  };