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