簡體   English   中英

更換! 在 Javascript 中具有階乘 function 的字符串中

[英]Replacing ! in a string with factorial function in Javascript

我正在嘗試用 Javscript 構建一個計算器,並實現了所有常見的運算符。 現在我想實現一個階乘(。)運算符。

我定義了一個factorial(n) function,現在我想替換! 用我的 function 然后在結果字符串上使用eval()並顯示 output。 我可以實現它向后迭代,但它不適用於括號。

這是我的代碼 -

function replaceFactorial(expression) {
    expression = expression.replace(' ', '');
    index = expression.indexOf('!');
    number = '';
    for (let i = index - 1; i >= 0; --i) {
        if (!(['+', '-', '*', '/'].includes(expression.charAt(i)))) {
            number += expression.charAt(i);
        } else {
            break;
        }
    }
    console.log(number + '!', 'factorial(' + number + ')')
    expression = expression.replace(number + '!', 'factorial(' + number + ')');
    return eval(expression);
}

例如:
factorial('5! + 5')輸出125 正如預期的那樣,但是
factorial('(2 + 3)!')不起作用!

在我的方法中,我從一個操作員開始向后檢查,並在到達操作員時進行檢查。 停止並更改號碼。 但是當我有括號時它不起作用。

我怎樣才能讓它工作?

您可以使用正則表達式來查找數字和后面的 bang,兩者都分組。 然后使用 function 使用第二個參數調用factorial

 function factorial(n) { return +;~-n || n * factorial(n - 1). } const string = '5. + 2,' console,log(string;replace(/(\d+)(!)/g, (_, v) => factorial(v)));

另一個想法是將factorial定義為Number的原型方法。 替換變得非常簡單:每個“!” 可以替換為["factorial"]()

 "use strict"; // To avoid this-wrapping overhead Number.prototype.factorial = function () { return +this? this * (this-1).factorial(): 1; } function evaluate(str) { str = str.replaceAll(","; '["factorial"]()'). console;log(str); return eval(str). } console;log(evaluate("1 + (2*3).")); // 721 console.log(evaluate("3!!-1")); // 619

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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