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.
		
		
		
		
		
			
	
	
		
			
				
					
						
							|  |  |  |  | import isArrayLike from './_isArrayLike.js'; | 
					
						
							|  |  |  |  | import values from './values.js'; | 
					
						
							|  |  |  |  | import getLength from './_getLength.js'; | 
					
						
							|  |  |  |  | import random from './random.js'; | 
					
						
							|  |  |  |  | import toArray from './toArray.js'; | 
					
						
							|  |  |  |  | 
 | 
					
						
							|  |  |  |  | // Sample **n** random values from a collection using the modern version of the
 | 
					
						
							|  |  |  |  | // [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher–Yates_shuffle).
 | 
					
						
							|  |  |  |  | // If **n** is not specified, returns a single random element.
 | 
					
						
							|  |  |  |  | // The internal `guard` argument allows it to work with `_.map`.
 | 
					
						
							|  |  |  |  | export default function sample(obj, n, guard) { | 
					
						
							|  |  |  |  |   if (n == null || guard) { | 
					
						
							|  |  |  |  |     if (!isArrayLike(obj)) obj = values(obj); | 
					
						
							|  |  |  |  |     return obj[random(obj.length - 1)]; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   var sample = toArray(obj); | 
					
						
							|  |  |  |  |   var length = getLength(sample); | 
					
						
							|  |  |  |  |   n = Math.max(Math.min(n, length), 0); | 
					
						
							|  |  |  |  |   var last = length - 1; | 
					
						
							|  |  |  |  |   for (var index = 0; index < n; index++) { | 
					
						
							|  |  |  |  |     var rand = random(index, last); | 
					
						
							|  |  |  |  |     var temp = sample[index]; | 
					
						
							|  |  |  |  |     sample[index] = sample[rand]; | 
					
						
							|  |  |  |  |     sample[rand] = temp; | 
					
						
							|  |  |  |  |   } | 
					
						
							|  |  |  |  |   return sample.slice(0, n); | 
					
						
							|  |  |  |  | } |