You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					38 lines
				
				1.6 KiB
			
		
		
			
		
	
	
					38 lines
				
				1.6 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | var ctx = require('./_ctx'); | ||
|  | var $export = require('./_export'); | ||
|  | var toObject = require('./_to-object'); | ||
|  | var call = require('./_iter-call'); | ||
|  | var isArrayIter = require('./_is-array-iter'); | ||
|  | var toLength = require('./_to-length'); | ||
|  | var createProperty = require('./_create-property'); | ||
|  | var getIterFn = require('./core.get-iterator-method'); | ||
|  | 
 | ||
|  | $export($export.S + $export.F * !require('./_iter-detect')(function (iter) { Array.from(iter); }), 'Array', { | ||
|  |   // 22.1.2.1 Array.from(arrayLike, mapfn = undefined, thisArg = undefined)
 | ||
|  |   from: function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) { | ||
|  |     var O = toObject(arrayLike); | ||
|  |     var C = typeof this == 'function' ? this : Array; | ||
|  |     var aLen = arguments.length; | ||
|  |     var mapfn = aLen > 1 ? arguments[1] : undefined; | ||
|  |     var mapping = mapfn !== undefined; | ||
|  |     var index = 0; | ||
|  |     var iterFn = getIterFn(O); | ||
|  |     var length, result, step, iterator; | ||
|  |     if (mapping) mapfn = ctx(mapfn, aLen > 2 ? arguments[2] : undefined, 2); | ||
|  |     // if object isn't iterable or it's array with default iterator - use simple case
 | ||
|  |     if (iterFn != undefined && !(C == Array && isArrayIter(iterFn))) { | ||
|  |       for (iterator = iterFn.call(O), result = new C(); !(step = iterator.next()).done; index++) { | ||
|  |         createProperty(result, index, mapping ? call(iterator, mapfn, [step.value, index], true) : step.value); | ||
|  |       } | ||
|  |     } else { | ||
|  |       length = toLength(O.length); | ||
|  |       for (result = new C(length); length > index; index++) { | ||
|  |         createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]); | ||
|  |       } | ||
|  |     } | ||
|  |     result.length = index; | ||
|  |     return result; | ||
|  |   } | ||
|  | }); |