【问题标题】:Replace part of string with values that are matched from an object array?用对象数组中匹配的值替换部分字符串?
【发布时间】:2021-05-04 19:54:35
【问题描述】:

我试图弄清楚如何从字符串中的对象中填充一些值,以便最终执行一些数学运算。我可以从括号之间获取数据和匹配值,但我被困在从哪里开始,或者是否有另一种更好的做法。这是我正在使用的示例:

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]”,依此类推。 ..

【问题讨论】:

  • 您可以使用模板文字。它们可用于在字符串中注入值

标签: javascript arrays string


【解决方案1】:

您可以使用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(/\[[A-Z]\]/gi, function(v)
  {
    return vars[v[1]];
  });
  
  return eval(newEquation);
}

console.log(calculate(equation, vars));

【讨论】:

  • 感谢您的解释,您知道执行此操作的“普通”方式吗?
【解决方案2】:

这是一种解决方案:

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)));

【讨论】:

    【解决方案3】:

    你可以试试这个。谢谢。

    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));

    【讨论】:

    • 但是剩下[45]
    • @LuisAFK 呃,抱歉……我忘了去掉括号。感谢您的关注。已编辑...
    猜你喜欢
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2016-09-14
    • 1970-01-01
    • 2014-03-22
    • 1970-01-01
    • 2015-11-03
    • 2023-02-16
    相关资源
    最近更新 更多