我想替换字符串公式中的整数来计算表达式。
我有一个数组,如
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产生的字符串。
谢谢你的帮忙
发布于 2018-05-16 09:10:59
试试replace和find
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转换的巴贝尔版本
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);
发布于 2018-05-16 09:46:07
您可以尝试以下方法(一般解决方案)
同时循环
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));
匹配的和替换
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));
发布于 2018-05-16 09:05:33
您可以遍历数组并解析相应的字段。在这里你如何做到这一点:
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);
https://stackoverflow.com/questions/50366415
复制相似问题