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.
		
		
		
		
		
			
		
			
				
					40 lines
				
				1.3 KiB
			
		
		
			
		
	
	
					40 lines
				
				1.3 KiB
			| 
											3 years ago
										 | 'use strict'; | ||
|  | // https://tc39.github.io/proposal-flatMap/#sec-FlattenIntoArray
 | ||
|  | var isArray = require('./_is-array'); | ||
|  | var isObject = require('./_is-object'); | ||
|  | var toLength = require('./_to-length'); | ||
|  | var ctx = require('./_ctx'); | ||
|  | var IS_CONCAT_SPREADABLE = require('./_wks')('isConcatSpreadable'); | ||
|  | 
 | ||
|  | function flattenIntoArray(target, original, source, sourceLen, start, depth, mapper, thisArg) { | ||
|  |   var targetIndex = start; | ||
|  |   var sourceIndex = 0; | ||
|  |   var mapFn = mapper ? ctx(mapper, thisArg, 3) : false; | ||
|  |   var element, spreadable; | ||
|  | 
 | ||
|  |   while (sourceIndex < sourceLen) { | ||
|  |     if (sourceIndex in source) { | ||
|  |       element = mapFn ? mapFn(source[sourceIndex], sourceIndex, original) : source[sourceIndex]; | ||
|  | 
 | ||
|  |       spreadable = false; | ||
|  |       if (isObject(element)) { | ||
|  |         spreadable = element[IS_CONCAT_SPREADABLE]; | ||
|  |         spreadable = spreadable !== undefined ? !!spreadable : isArray(element); | ||
|  |       } | ||
|  | 
 | ||
|  |       if (spreadable && depth > 0) { | ||
|  |         targetIndex = flattenIntoArray(target, original, element, toLength(element.length), targetIndex, depth - 1) - 1; | ||
|  |       } else { | ||
|  |         if (targetIndex >= 0x1fffffffffffff) throw TypeError(); | ||
|  |         target[targetIndex] = element; | ||
|  |       } | ||
|  | 
 | ||
|  |       targetIndex++; | ||
|  |     } | ||
|  |     sourceIndex++; | ||
|  |   } | ||
|  |   return targetIndex; | ||
|  | } | ||
|  | 
 | ||
|  | module.exports = flattenIntoArray; |