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

比方说,我有一个 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"

           }

        ]


阿晨1998
浏览 202回答 2
2回答

慕姐4208626

将函数表示为字符串是可能的,但既危险又丑陋。这通常需要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);

人到中年有点甜

从样本数据和描述来看,我猜你只有一种规则要计算?然后你可以使用这个:forceData.forEach(element => {      element["result"] = element.mass * element.acceleration;    });此外,在这种情况下,您不需要将规则存储在对象中。但是,如果您有任何其他规则,并在此处提供,我可以编辑代码。希望能帮助到你,
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript