2 回答

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);

TA贡献1895条经验 获得超7个赞
从样本数据和描述来看,我猜你只有一种规则要计算?然后你可以使用这个:
forceData.forEach(element => {
element["result"] = element.mass * element.acceleration;
});
此外,在这种情况下,您不需要将规则存储在对象中。
但是,如果您有任何其他规则,并在此处提供,我可以编辑代码。
希望能帮助到你,
添加回答
举报