37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "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;
 | |
| };
 |