Skip to content

Instantly share code, notes, and snippets.

@ubunteroz
Created January 14, 2018 06:38
Show Gist options
  • Save ubunteroz/6194ce3940afd5258d82d0a362ad7c76 to your computer and use it in GitHub Desktop.
Save ubunteroz/6194ce3940afd5258d82d0a362ad7c76 to your computer and use it in GitHub Desktop.
terbilang.js
module.exports = function(number) {
if (!number) {
number = 0;
}
const angka = ['satu', 'dua', 'tiga', 'empat', 'lima', 'enam', 'tujuh', 'delapan', 'sembilan'];
const base1000 = ['ribu', 'juta', 'miliar', 'triliun'];
let spelled = [];
let result = undefined;
function reverse(arr) {
let reversed = [];
for (var n = arr.length - 1; n > -1; n--) {
reversed.push(arr[n]);
}
return reversed;
}
if (number === 0) {
spelled.push('nol');
} else {
number_str = number.toString();
reversed = reverse(number_str);
reversed.forEach(function(cur, idx) {
const num = parseInt(cur);
if (idx === 0 && num > 0) {
spelled.push(angka[num - 1]);
} else if ([1, 4, 7, 10, 13].indexOf(idx) > -1) {
if (num > 0) {
if (num === 1) {
spelled.push('sepuluh');
} else {
spelled.push('puluh');
spelled.push(angka[num - 1]);
}
}
} else if ([2, 5, 8, 11, 14].indexOf(idx) > -1) {
if (num > 0) {
if (num === 1) {
spelled.push('seratus');
} else {
spelled.push('ratus');
spelled.push(angka[num - 1]);
}
}
} else if ([3, 6, 9, 12].indexOf(idx) > -1) {
if (num > 0) {
if (idx === 3 && num === 1 && !reversed[idx + 1]) {
spelled.push('seribu');
} else {
spelled.push(base1000[[3, 6, 9, 12].indexOf(idx)]);
spelled.push(angka[num - 1]);
}
} else if ((reversed[idx + 1] && reversed[idx + 1] !== '0') || (reversed[idx + 2] && reversed[idx + 2] !== '0')) {
spelled.push(base1000[[3, 6, 9, 12].indexOf(idx)]);
}
}
});
}
result = reverse(spelled)
.toString()
.replace(/sepuluh,satu/g, 'sebelas')
.replace(/sepuluh,dua/g, 'dua belas')
.replace(/sepuluh,tiga/g, 'tiga belas')
.replace(/sepuluh,empat/g, 'empat belas')
.replace(/sepuluh,lima/g, 'lima belas')
.replace(/sepuluh,enam/g, 'enam belas')
.replace(/sepuluh,tujuh/g, 'tujuh belas')
.replace(/sepuluh,delapan/g, 'delapan belas')
.replace(/sepuluh,sembilan/g, 'sembilan belas')
.replace(/,/g, ' ');
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment