27 lines
		
	
	
		
			846 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			27 lines
		
	
	
		
			846 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| // 22.1.3.3 Array.prototype.copyWithin(target, start, end = this.length)
 | |
| 'use strict';
 | |
| var toObject = require('./$.to-object')
 | |
|   , toIndex  = require('./$.to-index')
 | |
|   , toLength = require('./$.to-length');
 | |
| 
 | |
| module.exports = [].copyWithin || function copyWithin(target/*= 0*/, start/*= 0, end = @length*/){
 | |
|   var O     = toObject(this)
 | |
|     , len   = toLength(O.length)
 | |
|     , to    = toIndex(target, len)
 | |
|     , from  = toIndex(start, len)
 | |
|     , $$    = arguments
 | |
|     , end   = $$.length > 2 ? $$[2] : undefined
 | |
|     , count = Math.min((end === undefined ? len : toIndex(end, len)) - from, len - to)
 | |
|     , 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;
 | |
| }; |