为了账号安全,请及时绑定邮箱和手机立即绑定

在 API 中使用不同的计算规则

在 API 中使用不同的计算规则

阿晨1998 2022-01-07 14:09:12
比方说,我有一个 JS 对象数组,它看起来像:var forceData =     [        {           "mass":5,          "acceleration":2,          "ruleToCalculateForce":"mass * acceleration"       },       {           "mass":5,          "acceleration":3,          "ruleToCalculateForce":"mass * acceleration"       }    ]ruleToCalculateForce 包含如何使用牛顿定律使用质量和加速度计算力,即力 = 质量 * 加速度。此键的值与与其关联的键具有相同的名称(质量和加速度)。现在我想要的是根据 ruleToCalculateForce 中定义的规则计算将质量和加速度相乘的结果。所以,我想说的是,是否可以将对象的forceData数组转换为这样的东西,其中可以根据 ruleToCalculateForce 中定义的规则计算结果(新键):var forceData =     [        {           "mass":5,          "acceleration":2,          "result" : 10,          "ruleToCalculateForce":"mass * acceleration"       },       {           "mass":5,          "acceleration":3,          "result" : 15,          "ruleToCalculateForce":"mass * acceleration"       }    ]forceData 规则可以是动态的。假设力数据是这样的:var forceData =         [            {               "mass":5,              "acceleration":2,              "ruleToCalculateForce":"mass + acceleration"           },           {               "mass":5,              "acceleration":3,              "ruleToCalculateForce":"mass + acceleration"           }        ]然后更新的对象数组应该执行求和而不是乘法,它应该是:var forceData =         [            {               "mass":5,              "acceleration":2,              "result" : 7,              "ruleToCalculateForce":"mass + acceleration"           },           {               "mass":5,              "acceleration":3,              "result" : 8,              "ruleToCalculateForce":"mass + acceleration"           }        ]
查看完整描述

2 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

将函数表示为字符串是可能的,但既危险又丑陋。这通常需要eval方法或函数构造函数,这两者都是不受欢迎的。


相反,由于您没有说将函数存储为字符串是必需的,因此我建议将函数存储为函数。


let forceRule1 = obj => obj.mass * obj.acceleration;

let forceRule2 = obj => obj.mass + obj.acceleration;


let forceData = [

  {

    'mass': 5,

    'acceleration': 2,

    'ruleToCalculateForce': forceRule1

  }, {

    'mass': 5,

    'acceleration': 3,

    'ruleToCalculateForce': forceRule2

  }

];


forceData.forEach(obj => obj.resultForce = obj.ruleToCalculateForce(obj));

console.log(forceData);


编辑,根据评论,规则必须是字符串。在这种情况下,使用 eval 或函数构造函数可以工作:


let forceData = [

  {

    'mass': 5,

    'acceleration': 2,

    'ruleToCalculateForce': 'mass * acceleration'

  },

  {

    'mass': 5,

    'acceleration': 3,

    'ruleToCalculateForce': 'mass + acceleration'

  }

];


forceData.forEach(obj => obj.result = 

    new Function('mass', 'acceleration', `return ${obj.ruleToCalculateForce}`)(obj.mass, obj.acceleration));

console.log(forceData);



查看完整回答
反对 回复 2022-01-07
?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

从样本数据和描述来看,我猜你只有一种规则要计算?然后你可以使用这个:


forceData.forEach(element => {

      element["result"] = element.mass * element.acceleration;

    });

此外,在这种情况下,您不需要将规则存储在对象中。


但是,如果您有任何其他规则,并在此处提供,我可以编辑代码。


希望能帮助到你,


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 200 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号