123456789101112131415161718192021222324252627282930313233343536 |
- "use strict";
- var toInteger = require("../../../number/to-integer")
- , toPosInt = require("../../../number/to-pos-integer")
- , isPlainArray = require("../../is-plain-array")
- , isArray = Array.isArray
- , slice = Array.prototype.slice
- , objHasOwnProperty = Object.prototype.hasOwnProperty
- , max = Math.max;
- module.exports = function (start, end) {
- var length, result, i;
- if (!this || !isArray(this) || isPlainArray(this)) {
- return slice.apply(this, arguments);
- }
- length = toPosInt(this.length);
- start = toInteger(start);
- if (start < 0) start = max(length + start, 0);
- else if (start > length) start = length;
- if (end === undefined) {
- end = length;
- } else {
- end = toInteger(end);
- if (end < 0) end = max(length + end, 0);
- else if (end > length) end = length;
- }
- if (start > end) start = end;
- result = new this.constructor(end - start);
- i = 0;
- while (start !== end) {
- if (objHasOwnProperty.call(this, start)) result[i] = this[start];
- ++i;
- ++start;
- }
- return result;
- };
|