mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-01 15:57:48 +00:00
47 lines
1.6 KiB
JavaScript
47 lines
1.6 KiB
JavaScript
/**
|
|
* lodash 3.0.0 (Custom Build) <https://lodash.com/>
|
|
* Build: `lodash modern modularize exports="npm" -o ./`
|
|
* Copyright 2012-2015 The Dojo Foundation <http://dojofoundation.org/>
|
|
* Based on Underscore.js 1.7.0 <http://underscorejs.org/LICENSE>
|
|
* Copyright 2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
|
|
* Available under MIT license <https://lodash.com/license>
|
|
*/
|
|
var baseRandom = require('lodash._baserandom'),
|
|
isIterateeCall = require('lodash._isiterateecall'),
|
|
toIterable = require('lodash._toiterable'),
|
|
shuffle = require('lodash.shuffle');
|
|
|
|
/* Native method references for those with the same name as other `lodash` methods. */
|
|
var nativeMin = Math.min;
|
|
|
|
/**
|
|
* Gets a random element or `n` random elements from a collection.
|
|
*
|
|
* @static
|
|
* @memberOf _
|
|
* @category Collection
|
|
* @param {Array|Object|string} collection The collection to sample.
|
|
* @param {number} [n] The number of elements to sample.
|
|
* @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
|
|
* @returns {*} Returns the random sample(s).
|
|
* @example
|
|
*
|
|
* _.sample([1, 2, 3, 4]);
|
|
* // => 2
|
|
*
|
|
* _.sample([1, 2, 3, 4], 2);
|
|
* // => [3, 1]
|
|
*/
|
|
function sample(collection, n, guard) {
|
|
if (guard ? isIterateeCall(collection, n, guard) : n == null) {
|
|
collection = toIterable(collection);
|
|
var length = collection.length;
|
|
return length > 0 ? collection[baseRandom(0, length - 1)] : undefined;
|
|
}
|
|
var result = shuffle(collection);
|
|
result.length = nativeMin(n < 0 ? 0 : (+n || 0), result.length);
|
|
return result;
|
|
}
|
|
|
|
module.exports = sample;
|