5
5
* @param {string } baseTwoCharacters Character set for the output base
6
6
* @returns {string }
7
7
*/
8
- const convertArbitraryBase = ( stringInBaseOne , baseOneCharacters , baseTwoCharacters ) => {
9
- if ( [ stringInBaseOne , baseOneCharacters , baseTwoCharacters ] . map ( arg => typeof arg ) . some ( type => type !== 'string' ) ) {
8
+ const convertArbitraryBase = ( stringInBaseOne , baseOneCharacterString , baseTwoCharacterString ) => {
9
+ if ( [ stringInBaseOne , baseOneCharacterString , baseTwoCharacterString ] . map ( arg => typeof arg ) . some ( type => type !== 'string' ) ) {
10
10
throw new TypeError ( 'Only string arguments are allowed' )
11
11
}
12
- [ baseOneCharacters , baseTwoCharacters ] . forEach ( baseString => {
13
- const charactersInBase = [ ...baseString ]
12
+
13
+ const baseOneCharacters = [ ...baseOneCharacterString ]
14
+ const baseTwoCharacters = [ ...baseTwoCharacterString ]
15
+
16
+ for ( const charactersInBase of [ baseOneCharacters , baseTwoCharacters ] ) {
14
17
if ( charactersInBase . length !== new Set ( charactersInBase ) . size ) {
15
18
throw new TypeError ( 'Duplicate characters in character set are not allowed' )
16
19
}
17
- } )
20
+ }
18
21
const reversedStringOneChars = [ ...stringInBaseOne ] . reverse ( )
19
22
const stringOneBase = baseOneCharacters . length
20
23
let value = 0
@@ -31,11 +34,11 @@ const convertArbitraryBase = (stringInBaseOne, baseOneCharacters, baseTwoCharact
31
34
const stringTwoBase = baseTwoCharacters . length
32
35
while ( value > 0 ) {
33
36
const remainder = value % stringTwoBase
34
- stringInBaseTwo = baseTwoCharacters . charAt ( remainder ) + stringInBaseTwo
37
+ stringInBaseTwo = baseTwoCharacters . at ( remainder ) + stringInBaseTwo
35
38
value /= stringTwoBase
36
39
}
37
- const baseTwoZero = baseTwoCharacters . charAt ( 0 )
38
- return stringInBaseTwo . replace ( new RegExp ( `^${ baseTwoZero } +` ) , '' )
40
+ const baseTwoZero = baseTwoCharacters . at ( 0 )
41
+ return stringInBaseTwo . replace ( new RegExp ( `^${ baseTwoZero } +` , 'u' ) , '' )
39
42
}
40
43
41
44
export { convertArbitraryBase }
@@ -48,3 +51,6 @@ export { convertArbitraryBase }
48
51
49
52
// > convertArbitraryBase('129', '0123456789', '01234567')
50
53
// '201'
54
+
55
+ // > convertArbitraryBase('98', '0123456789', '💝🎸🦄')
56
+ // '🎸💝🎸🦄🦄'
0 commit comments