remeda
Version:
A utility library for JavaScript and Typescript.
1 lines • 1.8 kB
Source Map (JSON)
{"version":3,"file":"shuffle.cjs","names":["purry"],"sources":["../src/shuffle.ts"],"sourcesContent":["import type { IterableContainer } from \"./internal/types/IterableContainer\";\nimport type { ReorderedArray } from \"./internal/types/ReorderedArray\";\nimport { purry } from \"./purry\";\n\n/**\n * Shuffles the input array, returning a new array with the same elements in a random order.\n *\n * @param items - The array to shuffle.\n * @signature\n * R.shuffle(array)\n * @example\n * R.shuffle([4, 2, 7, 5]) // => [7, 5, 4, 2]\n * @dataFirst\n * @category Array\n */\nexport function shuffle<T extends IterableContainer>(\n items: T,\n): ReorderedArray<T>;\n\n/**\n * Shuffles the input array, returning a new array with the same elements in a random order.\n *\n * @signature\n * R.shuffle()(array)\n * @example\n * R.pipe([4, 2, 7, 5], R.shuffle()) // => [7, 5, 4, 2]\n * @dataLast\n * @category Array\n */\nexport function shuffle(): <T extends IterableContainer>(\n items: T,\n) => ReorderedArray<T>;\n\nexport function shuffle(...args: readonly unknown[]): unknown {\n return purry(shuffleImplementation, args);\n}\n\nfunction shuffleImplementation<T>(items: readonly T[]): T[] {\n const result = [...items];\n for (let index = 0; index < items.length; index++) {\n const rand = index + Math.floor(Math.random() * (items.length - index));\n const value = result[rand]!;\n result[rand] = result[index]!;\n result[index] = value;\n }\n return result;\n}\n"],"mappings":"wCAiCA,SAAgB,EAAQ,GAAG,EAAmC,CAC5D,OAAOA,EAAAA,EAAM,EAAuB,EAAK,CAG3C,SAAS,EAAyB,EAA0B,CAC1D,IAAM,EAAS,CAAC,GAAG,EAAM,CACzB,IAAK,IAAI,EAAQ,EAAG,EAAQ,EAAM,OAAQ,IAAS,CACjD,IAAM,EAAO,EAAQ,KAAK,MAAM,KAAK,QAAQ,EAAI,EAAM,OAAS,GAAO,CACjE,EAAQ,EAAO,GACrB,EAAO,GAAQ,EAAO,GACtB,EAAO,GAAS,EAElB,OAAO"}