UNPKG

locutus

Version:

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

56 lines (55 loc) 1.83 kB
import { ini_get } from "../info/ini_get.js"; export 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 = 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; }