[英]JavaScript: Sorting integers and operators from array
這是我的jsfiddle: JSFIDDLE
因此,我嘗試獲取顯示3個不同對象的輸出:
// Wanting to get
// {
// 0: {type: "number", value: 22},
// 1: {type: "operator", value: "+"},
// 2: {type: "number", value: 22},
// }
function lexer(contents) {
const tokens = [];
while (contents.length) {
let char = contents[0];
contents = contents.slice(1);
if (/[-+*\/]/.test(char)) {
tokens.push({ type: 'operator', value: char });
}
let number = '';
while (/[1-9]/.test(char)) {
number += char;
char = contents[0];
contents = contents.slice(1);
}
if (number !== '') {
tokens.push({ type: 'number', value: parseInt(number, 10) });
}
}
return tokens;
}
const result = lexer(["2", "2", "+", "2", "2"]);
現在,我將填寫更多文本。 我不確定這段代碼有什么問題,因為它似乎正在跳過其中一個輸出。 我猜想它與while循環有關。
您的問題是您在驗證contents
是數字之前先對contents
進行切片。 因此,當它達到+
它已經切它關閉陣列的它推動令牌,並在與條件下一循環之前contents.length
惡有惡報,正將已被丟棄,你有沒有辦法知道它在那兒。
我建議不要在讀取字符后立即進行切片,而僅在以某種方式使用字符后才進行切片,即在按下運算符或將char附加到number
。
function lexer(contents) {
const tokens = [];
while (contents.length) {
let char = contents[0];
if (/[-+*\/]/.test(char)) {
tokens.push({ type: 'operator', value: char });
contents = contents.slice(1);
}
let number = '';
while (/[1-9]/.test(char)) {
number += char;
contents = contents.slice(1);
char = contents[0];
}
if (number !== '') {
tokens.push({ type: 'number', value: parseInt(number, 10) });
}
}
return tokens;
}
這是一個細微的差異,但是通過這種方式,您直到使用完數據后才更改數組,從而確保了一致性。
更新的小提琴: https : //jsfiddle.net/semhw54y/10/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.