簡體   English   中英

用與 object 數組匹配的值替換部分字符串?

[英]Replace part of string with values that are matched from an object array?

我試圖弄清楚如何從字符串中的對象中填充一些值,以便最終執行一些數學運算。 我可以從括號之間獲取數據和匹配值,但我被困在 go 的位置,或者是否有另一種更好的做法。 這是我正在使用的示例:

var array = [{name: M, value: 45},{name: F, value: 23},{name: L, value: 9}]
var string = '( 2 * [M] ) * ( 5 / [F] ) * ( 100 + [L] )'

為了簡化我的解釋,我需要采用那個字符串公式,並將“M”的值插入“[M]”,將“F”的值插入“[F]”,依此類推......

您可以使用nerdamer 它是用來做公式和東西的。

 let vars = {M: 45, F: 23, L: 9}; let equation = '( 2 * M ) * ( 5 / F ) * ( 100 + L )'; console.log( equation, '=', nerdamer( equation, vars ).evaluate().text() );
 <script src="https://cdn.jsdelivr.net/npm/nerdamer@latest/nerdamer.core.js"></script>

如果您想要更簡單的方法,只需執行以下操作:

 let vars = {M: 45, F: 23, L: 9}; let equation = '( 2 * [M] ) * ( 5 / [F] ) * ( 100 + [L] )'; function calculate(equation, vars) { let newEquation = equation.replaceAll(/\[[AZ]\]/gi, function(v) { return vars[v[1]]; }); return eval(newEquation); } console.log(calculate(equation, vars));

這是一條線解決方案:

 const array = [{name: 'M', value: 45},{name: 'F', value: 23},{name: 'L', value: 9}] const string = "( 2 * [M] ) * ( 5 / [F] ) * ( 100 + [L] )"; const calculate = (array) => array.reduce((accumulator, currentValue)=>{ return accumulator.replace(`[${currentValue.name}]`, currentValue.value)}, string); console.log('Result: ', eval(calculate(array)));

你可以試試這個。 謝謝你。

 var variables = [{name: "M", value: 45}, {name: "F", value: 23}, {name: "L", value: 9}]; var equation = '( 2 * [M] ) * ( 5 / [F] ) * ( 100 + [L] )'; const getfinalEquation = (array, equationWithVars) => { let finalEquation = equationWithVars; array.forEach(item => { finalEquation = finalEquation.replaceAll(`[${item.name}]`, item.value); }) return finalEquation; } console.log(getfinalEquation(variables, equation));

暫無
暫無

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

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