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;
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								});
							 |