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

Javascript 如何在JS中替换字符串公式中的整数,javascript,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",

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

我有一个数组,比如

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生成的字符串


感谢您的帮助

您可以遍历数组并解析相应字段。以下是您的操作方法:


var value_数组=[{value:“11”,顺序:“1”},{value:“4”,顺序:“2”},{value:“31”,顺序:“3”},{value:“41”,顺序:“4”},{value:“51”,顺序:“5”},{value:“61”,顺序:“6”},{value:“71”,顺序:“7”{value:“80”,顺序:“8”{value:“91”,顺序:“9”{value:“101”,顺序:“10”{value:“111”,顺序:“11”{value:“128”,顺序:“12”{value:“131,{,顺序:“13”},{值:“145”,顺序:“14”}]
value_array.forEach(elem=>{
elem.order=parseInt(elem.order);
});
console.log(值_数组);

您可以创建一个函数来进行替换

常量值\u数组=[{
值:“11”,
命令:“1”,
}, {
值:“4”,
命令:“2”,
}, {
值:“31”,
命令:“3”,
}, {
值:“41”,
命令:“4”,
}, {
值:“51”,
命令:“5”,
}, {
值:“61”,
命令:“6”,
}, {
值:“71”,
命令:“7”,
}, {
值:“80”,
命令:“8”,
}, {
值:“91”,
命令:“9”,
}, {
值:“101”,
命令:“10”,
}, {
值:“111”,
命令:“11”,
}, {
值:“128”,
命令:“12”,
}, {
值:“131”,
命令:“13”,
}, {
值:“145”,
命令:“14”,
}];
//函数,它将用值替换订单
功能rbo(订单){
const ret=value_array.find(x=>x.order==String(order));
如果(!ret){
抛出新错误(“无法继续”,命令);
}
返回编号(返回值);
}
常量公式结果=((rbo(1)+rbo(14))*rbo(5)+rbo(12)*rbo(3)-rbo(7)*rbo(8)/rbo(2)+rbo(4));

控制台日志(公式化结果)尝试
替换
查找

let str=`((1+14)*5+12*3-7*8/2+4)`
让值_数组=[
{值:'11',顺序:'1'},
{值:'4',顺序:'2'},
{值:'31',顺序:'3'},
{值:'41',顺序:'4'},
{值:'51',顺序:'5'},
{值:'61',顺序:'6'},
{值:'71',顺序:'7'},
{值:'80',顺序:'8'},
{值:'91',顺序:'9'},
{值:'101',顺序:'10'},
{值:'111',顺序:'11'},
{值:'128',顺序:'12'},
{值:'131',顺序:'13'},
{值:'145',顺序:'14'}
]
让res=str.replace(/([^\d]*?)(\d+)([^\d]*?)/g,(…args)=>{
返回args[1]+value_数组。查找(o=>o.order===args[2])。value+args[3]
})
console.log(res)
您可以尝试以下(通用解决方案)

带while循环

var-value_数组=[{value:“11”,顺序:“1”},{value:“4”,顺序:“2”},{value:“31”,顺序:“3”},{value:“41”,顺序:“4”},{value:“51”,顺序:“5”},{value:“61”,顺序:“6”{value:“71”,顺序:“7”{value:“80”,顺序:“8”{value:“91”,顺序:“9”},{value:“101”,顺序:“10”},{value:“111”,顺序:“11”{value:“128”,顺序:“12”{value:{“131”,顺序:“13”},{值:“145”,顺序:“14”}]
//需要评估的公式
var公式=“(1+14)*5+12*3-7*8/2+4)”;
//为订单值对创建映射
var-map={};
value_array.forEach(({order,value})=>map[order]=value);
var formulaArray=公式分割(“”);
var i=0;
var num=“”;
var结果=”;
//迭代字符数组并用map中的值替换顺序
while(ilog(eval(result));
您可以使用哈希表替换所有数字

var values=[{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”,{值:“128”,顺序:“12”},{值:“131”,顺序:“13”},{值:“145”,顺序:“14”},
hash=values.reduce((h,{value,order})=>Object.assign(h,{[order]:value}),Object.create(null)),
公式='((1+14)*5+12*3-7*8/2+4)';
公式=公式。替换(/\d+/g,m=>m在散列中?散列[m]:m);
console.log(公式);

console.log(eval(formula));
您可以使用eval(res)为了得到结果。@MohammadAliRony,是的,我知道,但是
eval
不是一个好主意。这就是为什么我没有重写它。但是,我没有想出另一种更简单的方法来执行这个公式。关于如何去掉eval-你试过代码吗?它报告了一个语法错误。@alperzzz更新了答案。记住es6可以转换为@xianshenglu的es5答案在JSFIDLE上运行良好,但我的平台不支持es6,您有什么建议吗?