27 lines
		
	
	
		
			876 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			876 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
// 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
 | 
						|
'use strict';
 | 
						|
var toObject = require('./_to-object');
 | 
						|
var toAbsoluteIndex = require('./_to-absolute-index');
 | 
						|
var toLength = require('./_to-length');
 | 
						|
 | 
						|
module.exports = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
 | 
						|
  var O = toObject(this);
 | 
						|
  var len = toLength(O.length);
 | 
						|
  var to = toAbsoluteIndex(target, len);
 | 
						|
  var from = toAbsoluteIndex(start, len);
 | 
						|
  var end = arguments.length > 2 ? arguments[2] : undefined;
 | 
						|
  var count = Math.min((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
 | 
						|
  var inc = 1;
 | 
						|
  if (from < to && to < from + count) {
 | 
						|
    inc = -1;
 | 
						|
    from += count - 1;
 | 
						|
    to += count - 1;
 | 
						|
  }
 | 
						|
  while (count-- > 0) {
 | 
						|
    if (from in O) O[to] = O[from];
 | 
						|
    else delete O[to];
 | 
						|
    to += inc;
 | 
						|
    from += inc;
 | 
						|
  } return O;
 | 
						|
};
 |