Handmade JavaScript Atoi
by Erick Petrucelli
TypeScript
function atoi(str) {
const symbols = ['-', '+'];
const numbers = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
const min = -2147483648;
const max = 2147483647;
let r = '', s = '';
for (let i = 0; i < str.length; i++) {
const c = str.charAt(i);
if (c === ' ') {
if (!r) continue;
break;
} else if (c === '0') {
if (!r) continue;
r += c;
} else if (symbols.includes(c)) {
if (r || s) break;
s = c;
} else if (numbers.includes(c)) {
r += c;
} else {
break;
}
}
if (!r) return 0;
r = Number(`${s}${r}`);
return r < min ? min : r > max ? max : r;
}
function log(input, expected) {
document.write(`<pre>${input}: <b>${atoi(input)}</b> <small>// ${expected}</small></pre>`);
}
log('-123', -123);
log(' -', 0);
log(' 1231231231311133', 2147483647);
log('-999999999999', -2147483648);
log(' -0012gfg4', -12);
log('325-', 325);
log('506f506', 506);