UNPKG

locutus

Version:

Locutus other languages' standard libraries to JavaScript for fun and educational purposes

59 lines (58 loc) 1.95 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.shuffle = shuffle; const ini_get_ts_1 = require("../info/ini_get.js"); function shuffle(inputArr) { // discuss at: https://locutus.io/php/shuffle/ // original by: Jonas Raoni Soares Silva (https://www.jsfromhell.com) // revised by: Kevin van Zonneveld (https://kvz.io) // revised by: Brett Zamir (https://brett-zamir.me) // improved by: Brett Zamir (https://brett-zamir.me) // example 1: var $data = {5:'a', 2:'3', 3:'c', 4:5, 'q':5} // example 1: ini_set('locutus.sortByReference', true) // example 1: shuffle($data) // example 1: var $result = $data.q // returns 1: 5 const valArr = []; let k = ''; let i = 0; let sortByReference = false; let populateArr = []; for (k in inputArr) { // Get key and value arrays if (inputArr.hasOwnProperty(k)) { const value = inputArr[k]; if (value === undefined) { continue; } valArr.push(value); if (sortByReference) { delete inputArr[k]; } } } valArr.sort(function () { return 0.5 - Math.random(); }); const iniVal = (0, ini_get_ts_1.ini_get)('locutus.sortByReference') || 'on'; sortByReference = iniVal === 'on'; populateArr = sortByReference ? inputArr : populateArr; for (i = 0; i < valArr.length; i++) { // Repopulate the old array if (Array.isArray(populateArr)) { const value = valArr[i]; if (value === undefined) { continue; } populateArr[i] = value; } else { const value = valArr[i]; if (value === undefined) { continue; } populateArr[String(i)] = value; } } return sortByReference || populateArr; }