首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在JS中替换字符串公式中的整数

如何在JS中替换字符串公式中的整数
EN

Stack Overflow用户
提问于 2018-05-16 08:54:56
回答 5查看 1.5K关注 0票数 2

我想替换字符串公式中的整数来计算表达式。

我有一个数组,如

代码语言:javascript
运行
复制
var value_array=[
{value: "11", order: "1"},
{value: "4", order: "2"},
{value: "31", order: "3"},
{value: "41", order: "4"},
{value: "51", order: "5"},
{value: "61", order: "6"},
{value: "71", order: "7"},
{value: "80", order: "8"},
{value: "91", order: "9"},
{value: "101", order: "10"},
{value: "111", order: "11"},
{value: "128", order: "12"},
{value: "131", order: "13"},
{value: "145", order: "14"}
];

我的公式是((1+14)*5+12*3-7*8/2+4)

我想用相应的顺序值替换整数。

我应该得到((11+145)*51+128*31-71*80/4+41),然后计算由10545产生的字符串。

谢谢你的帮忙

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2018-05-16 09:10:59

试试replacefind

代码语言:javascript
运行
复制
let str = `((1+14)*5+12*3-7*8/2+4)`
let value_array = [
  { value: '11', order: '1' },
  { value: '4', order: '2' },
  { value: '31', order: '3' },
  { value: '41', order: '4' },
  { value: '51', order: '5' },
  { value: '61', order: '6' },
  { value: '71', order: '7' },
  { value: '80', order: '8' },
  { value: '91', order: '9' },
  { value: '101', order: '10' },
  { value: '111', order: '11' },
  { value: '128', order: '12' },
  { value: '131', order: '13' },
  { value: '145', order: '14' }
]
let res = str.replace(/([^\d]*?)(\d+)([^\d]*?)/g, (...args) => {
  return args[1] + value_array.find(o => o.order === args[2]).value + args[3]
})
console.log(res)

下面是由es5转换的巴贝尔版本

代码语言:javascript
运行
复制
var str = '((1+14)*5+12*3-7*8/2+4)';
var value_array = [{ value: '11', order: '1' }, { value: '4', order: '2' }, { value: '31', order: '3' }, { value: '41', order: '4' }, { value: '51', order: '5' }, { value: '61', order: '6' }, { value: '71', order: '7' }, { value: '80', order: '8' }, { value: '91', order: '9' }, { value: '101', order: '10' }, { value: '111', order: '11' }, { value: '128', order: '12' }, { value: '131', order: '13' }, { value: '145', order: '14' }];
var res = str.replace(/([^\d]*?)(\d+)([^\d]*?)/g, function () {
  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
    args[_key] = arguments[_key];
  }

  return args[1] + value_array.find(function (o) {
    return o.order === args[2];
  }).value + args[3];
});
console.log(res);

票数 5
EN

Stack Overflow用户

发布于 2018-05-16 09:46:07

您可以尝试以下方法(一般解决方案)

同时循环

代码语言:javascript
运行
复制
var value_array=[{value: "11", order: "1"},{value: "4", order: "2"},{value: "31", order: "3"},{value: "41", order: "4"},{value: "51", order: "5"},{value: "61", order: "6"},{value: "71", order: "7"},{value: "80", order: "8"},{value: "91", order: "9"},{value: "101", order: "10"},{value: "111", order: "11"},{value: "128", order: "12"},{value: "131", order: "13"},{value: "145", order: "14"}]

// Formula that needs to be evaluated
var formula = "((1+14)*5+12*3-7*8/2+4)";

// Create the map for order value pair
var map = {};
value_array.forEach(({order, value}) => map[order] = value);

var formulaArray = formula.split('');
var i = 0;
var num = "";
var result = "";

// Iterate over character array and replace order with values from map
while (i < formulaArray.length) {
  if (isNaN(formulaArray[i])) {
    if (num) {
      result += map[num];
      num = "";
    }
    result += formulaArray[i];
  } else {
    num += formulaArray[i];
  }
  i++;
}

// In case there is a number at last and not added in result
if (num) {
  result += map[num];
}

// Finally evaluating the result
console.log(eval(result));

匹配的和替换

代码语言:javascript
运行
复制
var value_array=[{value: "11", order: "1"},{value: "4", order: "2"},{value: "31", order: "3"},{value: "41", order: "4"},{value: "51", order: "5"},{value: "61", order: "6"},{value: "71", order: "7"},{value: "80", order: "8"},{value: "91", order: "9"},{value: "101", order: "10"},{value: "111", order: "11"},{value: "128", order: "12"},{value: "131", order: "13"},{value: "145", order: "14"}]

// Formula that needs to be evaluated
var formula = "((1+14)*5+12*3-7*8/2+4)";
// Collect all the orders
var orders = formula.match(/\d+/g);
// replace all orders with special character
formula = formula.replace(/\d+/g, "~~");

// iterate over orders and replace the order with value from value_array
orders.forEach((order, index) => {
  var value = value_array.find((val) => val.order === order);
  orders[index] = value.value; // assuming value will always be found
});

// Iterating over the orders and replacing each special character with the value stored in orders array
orders.forEach((val) => {
  formula = formula.replace("~~", val);
});

// Finally evaluating the formula
console.log(eval(formula));

票数 1
EN

Stack Overflow用户

发布于 2018-05-16 09:05:33

您可以遍历数组并解析相应的字段。在这里你如何做到这一点:

代码语言:javascript
运行
复制
var value_array=[{value: "11", order: "1"},{value: "4", order: "2"},{value: "31", order: "3"},{value: "41", order: "4"},{value: "51", order: "5"},{value: "61", order: "6"},{value: "71", order: "7"},{value: "80", order: "8"},{value: "91", order: "9"},{value: "101", order: "10"},{value: "111", order: "11"},{value: "128", order: "12"},{value: "131", order: "13"},{value: "145", order: "14"}]

value_array.forEach(elem =>{
  elem.order = parseInt(elem.order);
});

console.log(value_array);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50366415

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档