Now my approach is to generate only one letter, but if there is a lot of data and it comes after column Z
, my code breaks.
Working code that will give a, d
:
JavaScript
x
9
1
const countData = [1, 2, 3, 4].length;
2
const initialLetter = 'A'.toLowerCase();
3
const initialLetterNumber = initialLetter.charCodeAt(0) - 97;
4
const lastLetter = String.fromCharCode(
5
initialLetterNumber + countData - 1 + 97
6
);
7
8
console.log(initialLetter, lastLetter);
9
Non-working code, in this case I want to get z, ac
.
JavaScript
1
9
1
const countData = [1, 2, 3, 4].length;
2
const initialLetter = 'Z'.toLowerCase();
3
const initialLetterNumber = initialLetter.charCodeAt(0) - 97;
4
const lastLetter = String.fromCharCode(
5
initialLetterNumber + countData - 1 + 97
6
);
7
8
console.log(initialLetter, lastLetter);
9
Some inputs and wanted result:
JavaScript
1
32
32
1
input: a, data length: 1 output: a,
2
input: a, data length: 2 output: b,
3
input: a, data length: 3 output: c,
4
input: a, data length: 4 output: d,
5
input: a, data length: 5 output: e,
6
7
input: z, data length: 1 output: z,
8
input: z, data length: 2 output: aa,
9
input: z, data length: 3 output: ab,
10
input: z, data length: 4 output: ac,
11
input: z, data length: 5 output: ad,
12
13
input: ad, data length: 1 output: ad,
14
input: ad, data length: 2 output: ae,
15
input: ad, data length: 3 output: af,
16
input: ad, data length: 4 output: ag,
17
input: ad, data length: 5 output: ah,
18
19
input: az, data length: 1 output: az,
20
input: az, data length: 2 output: ba,
21
input: az, data length: 3 output: bb,
22
input: az, data length: 4 output: bc,
23
input: az, data length: 5 output: bd,
24
25
input: bz, data length: 1 output: bz,
26
input: bz, data length: 2 output: ca,
27
input: bz, data length: 3 output: cb,
28
input: bz, data length: 4 output: cc,
29
input: bz, data length: 5 output: cd,
30
31
32
Advertisement
Answer
You could take two functions to get an integer value from a string and a string from an integer value.
With this functions, you could adjust the numerical value and get an encoded string of this value.
JavaScript
1
15
15
1
const
2
decode = string => [string].reduce((r, c) => r * 26 + parseInt(c, 36) - 9, 0) - 1,
3
encode = integer => {
4
let result = '';
5
do {
6
result = (integer % 26 + 10).toString(36) + result;
7
integer = Math.floor(integer / 26) - 1;
8
} while (integer >= 0)
9
return result;
10
};
11
12
for (let i = 0; i < 26 * 27 + 1; i++) {
13
const s = encode(i);
14
document.getElementById('out').innerHTML += [i, s, decode(s)].join(' ') + 'n';
15
}
JavaScript
1
1
1
<pre id="out"></pre>