比方说,我有一个 JS 对象数组,如下所示:
var forceData =
[
{
"mass":5,
"acceleration":2,
"ruleToCalculateForce":"mass * acceleration"
},
{
"mass":5,
"acceleration":3,
"ruleToCalculateForce":"mass * acceleration"
}
]
ruleToCalculateForce contains how to calculate force using mass and acceleration using Newton's Law which is Force = mass * acceleration. The value of this key has same names of the keys associated with it (mass & acceleration).
现在我想要的是根据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"
}
]
最佳答案
将函数表示为字符串是可能的,但很危险且丑陋。这通常需要 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);
关于javascript - 在 API 中使用不同的计算规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58978885/