我想处理两个对象。
obj1 数组对象,具有公式。
obj2 具有值。 我希望处理/计算这两个对象,以便在输出中出现obj1中存在的键,并且该值使用公式进行处理。之前用EVAL完成了,但不想再使用它。
请建议其他方法来实现相同的功能。
const obj1 = [{ _id: '5 f467650890a7444d8d9ea5b', keyname: 'fTime',
PTag: '(FaultHrs*360)+(FaultMins*60)+FaultSecs', __v: 0 },
{ _id: '5 f467650890a7444d8d9ea5b', keyname: 'rTime',
PTag: '(RunHrs*360)+(RunMins*60)+RunSecs', __v: 0 }
]
const obj2 = { FaultHrs: 2, FaultMins: 0, FaultSecs: 49, RunHrs: 1, RunMins: 0, RunSecs: 0,}
const res = obj1.reduce((res, k) => {
// find out parameters in formula
const matches = k.PTag.match(/[a-zA-Z]+/g);
// substitute them with numbers
const newTag = matches.reduce((tag, m) => tag.replace(m, obj2[m] || 0), k.PTag);
// calculate result
res[k.keyname] = eval(newTag);
return res;
}, {});
console.log(res)
eval
可能是最好的选择。它并不是绝对有害的,只是通常情况下不是正确的选项,但这种情况下,在我看来,它是正确的选择。 - CertainPerformancenew Function()
而不是eval()
会更好吧? - bill.gatesnew Function()
更好、更快,但他们没有详细解释。如果你看一下速度比较https://www.measurethat.net/Benchmarks/Show/2858/0/eval-vs-new-function,实际上有一个差异。 - bill.gates