簡體   English   中英

JavaScript:從數組中排序整數和運算符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM