123456789101112131415161718192021222324252627282930313233343536373839 |
- // 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')
- , hasOwnProperty = Object.prototype.hasOwnProperty
- , max = Math.max, min = Math.min;
- module.exports = function (target, start/*, end*/) {
- var o = validValue(this), end = arguments[2], l = toPosInt(o.length)
- , to, from, fin, count, direction;
- target = toInteger(target);
- start = toInteger(start);
- end = (end === undefined) ? l : toInteger(end);
- to = target < 0 ? max(l + target, 0) : min(target, l);
- from = start < 0 ? max(l + start, 0) : min(start, l);
- fin = end < 0 ? max(l + end, 0) : min(end, l);
- count = min(fin - from, l - to);
- direction = 1;
- if ((from < to) && (to < (from + count))) {
- direction = -1;
- from += count - 1;
- to += count - 1;
- }
- while (count > 0) {
- if (hasOwnProperty.call(o, from)) o[to] = o[from];
- else delete o[from];
- from += direction;
- to += direction;
- count -= 1;
- }
- return o;
- };
|