1 回答

TA貢獻1883條經驗 獲得超3個贊
讓我的評論成為答案:
不要同時使用所有的[++b]and索引和遞增。[b++]它使代碼更難閱讀并且更容易出錯,就像您的情況一樣 - 刪除最后一個b++(繼續之前的那個)可以解決問題(見下文)。我更喜歡在命令之后使用索引和增量(對于++b)
工作代碼:
var a=String.raw`(0.34+4+5.5++4() )`
function tokenizer(a){var b=0;d=[];e="";
while(b<a.length){var c=a[b];
if(c=="+"){d.push("+");c=a[++b];continue;}
if(c=="("){d.push(c);b++;continue;}
if(c==")"){d.push(c);b++;continue;}
if(c==" "||c=="\n"||c=="\t"){b++;continue;}
if(/[0-9.]/.test(c)==true){while(/[0-9.]/.test(c)==true){e+=c;c=a[++b]};d.push(e);e="";continue}
}
return d;
}
console.log(tokenizer(a))
輸出:
[
'(', '0.34', '+',
'4', '+', '5.5',
'+', '+', '4',
'(', ')', ')'
]
我認為還可以使代碼更清晰:
縮進并將代碼拆分為更多行,每行一個命令
使用有意義的變量名。同樣,您節省了一些空間和寫作,但代價是代碼的可讀性較差。并因此以更困難的調試為代價:-)
添加回答
舉報