locutus
Version:
Locutus other languages' standard libraries to JavaScript for fun and educational purposes
35 lines (34 loc) • 1.16 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.array_rand = array_rand;
function array_rand(array, num) {
// discuss at: https://locutus.io/php/array_rand/
// original by: Waldo Malqui Silva (https://waldo.malqui.info)
// reimplemented by: Rafał Kukawski
// example 1: array_rand( ['Kevin'], 1 )
// returns 1: '0'
// By using Object.keys we support both, arrays and objects
// which phpjs wants to support
const keys = Object.keys(array);
if (typeof num === 'undefined' || num === null) {
num = 1;
}
else {
num = +num;
}
if (isNaN(num) || num < 1 || num > keys.length) {
return null;
}
// shuffle the array of keys
for (let i = keys.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1)); // 0 ≤ j ≤ i
const tmp = keys[j];
const current = keys[i];
if (tmp === undefined || current === undefined) {
return null;
}
keys[j] = current;
keys[i] = tmp;
}
return num === 1 ? (keys[0] ?? null) : keys.slice(0, num);
}