diff --git a/tools/crypto/bip39-generator.vue b/tools/crypto/bip39-generator.vue index 6de45651..7a61a98e 100644 --- a/tools/crypto/bip39-generator.vue +++ b/tools/crypto/bip39-generator.vue @@ -43,13 +43,13 @@ path: '/bip39-generator' diff --git a/utils/random.ts b/utils/random.ts index 30eb3d2d..d04142b2 100644 --- a/utils/random.ts +++ b/utils/random.ts @@ -6,8 +6,25 @@ const randFromArray = (array: any[]) => array[Math.floor(random() * array.length const randIntFromInterval = (min: number, max: number) => Math.floor(random() * (max - min) + min) +// Durstenfeld shuffle +const shuffleArrayMutate = (array: T[]): T[] => { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + + return array +} + +const shuffleArray = (array: T[]): T[] => shuffleArrayMutate([...array]) + +const shuffleString = (str: string, delimiter: string = ''): string => shuffleArrayMutate(str.split(delimiter)).join(delimiter) + export { randFromArray, randIntFromInterval, - random + random, + shuffleArray, + shuffleArrayMutate, + shuffleString } diff --git a/utils/string.ts b/utils/string.ts index ae315aa0..930cbdf6 100644 --- a/utils/string.ts +++ b/utils/string.ts @@ -1,5 +1,3 @@ const capitalise = (s: string) => s.charAt(0).toUpperCase() + s.slice(1) -const shuffle = (s: string) => s.split('').sort(() => 0.5 - Math.random()).join('') - -export {capitalise, shuffle} +export {capitalise}