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