Reputation: 103
I have two objects and I want to process them without use of for Loop and get the result.
key is taken from obj1 "keyname"
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,
}
Result: {
fTime: 769,
rTime: 360
}
Upvotes: 0
Views: 68
Reputation: 2256
Note: This uses eval function which can be dangerous. Use it only when you're sure PTag
is a safe expression.
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)
Output:
{fTime: 769, rTime: 360}
Upvotes: 1