javascript - 跪求各位大大分享一个更好的解决方法?

 我和你2602883283 发布于 2022-11-08 13:39

现在的需求是:

已经从后台返回了JSON数据,如下:

[{
    "c": 1
}, {
    "f": 1
}, {
    "e": 1
}, {
    "y": 2
}]

然后有许多个较为复杂的计算公式,现在取出一个公式,如下:
pow( (pow(c+f, 2) + pow(e, 3) + pow(e + y, 2) ), 3/2)

如何快速的替换 c,f,e,y ? 然后我写了一个类似如下的处理代码,但是被老大否决了(PS:当时心中有一万只草泥马飞过)?

"use strict"

let ex1 = "pow( (pow(c+f, 2) + pow(e, 3) + pow(e + y, 2) ), 3/2)"

let returnV = [{
    "c": 1
}, {
    "f": 1
}, {
    "e": 1
}, {
    "y": 2
}]

let Reg

let ex1 = expression
    .replace(/pow/g, "Math.pow")

for (let i = 0; i < returnV.length; i++) {
    let item = returnV[i]
    let key = Object.keys(item)

    Reg = new RegExp(key, 'g')
    ex1 = ex1.replace(Reg, returnV[i][key])
}

console.log(eval(ex1))

求各位大大分享一下有没有更好的处理办法,送上我的膝盖~

3 个回答
  • const item=Object.assign({}, ...returnV);
    let s = ex1.replace(/\b([a-z])\b/g,($,$1)=>item[$1]);
    console.log(eval.call(null, s));
    

    刚尝试了下,也可以用字符串模板来做,es6代码还真是晦涩。

    const item=Object.assign({}, ...returnV);
    function compile(template){
      var script =
      `(function(item){
        const pow=Math.pow;
        return ${ template };
      })`;
    
      return script;
    }
    const template = ex1.replace(/\b([a-z])\b/g, 'item.$1');
    const cal= eval(compile(template));
    console.log(cal(item))
    2022-11-12 01:58 回答
  • 别 replace 了
    直接

    let pow = Math.pow;
    2022-11-12 01:58 回答
  • 一种更简洁的方法:

    "use strict"
    
    let expression = "pow(((c+f)+e),y)"
    
    let returnV = [{
        "c": 1
    }, {
        "f": 1
    }, {
        "e": 1
    }, {
        "y": 2
    }]
    
    let Reg
    
    let ex1 = expression
        .replace(/pow/g, "Math.pow")
    
    var that = global;
    
    returnV.forEach(function(v, k) {
        Object.assign(that, v);
    });
    2022-11-12 01:58 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有