在学习NodeJS时,我一直在努力为该代码块编写更简洁的逻辑(见下文),以引入递归或使用 ES6方法 >,以提供更多的优雅和更好的可读性。
for of loops
有想法吗?
export function pleaseRefactorMe(measures, metrics, stats) {
if (!Array.isArray(metrics)) metrics = [metrics] //=> returns array [ 'temperature' ]
if (!Array.isArray(stats)) stats = [stats] //> returns array [ 'min', 'max', 'average' ]
let statistics = []
/**** refactor opportunity for nested for of loops ****/
for (let metric of metrics) {
for (let stat of stats) {
try {
let value = calculateStatsForMetric(stat, metric, measure)
if (value) {
statistics.push({
metric: metric,
stat: stat,
value: value
})
}
} catch (err) {
return err
}
}
}
return statistics
}
答案 0 :(得分:1)
一种简单的方法是使用forEach
-
let statistics = [];
metrics.forEach(m => {
stats.forEach(s => {
let value = calculateStatsForMetric(s, m, measures);
if (value) {
statistics.push({
metric: m,
stat: s,
value: value
});
}
});
});
答案 1 :(得分:1)
首先,始终传递数组,方法通常不应在JavaScript中进行这种输入验证。另外,不要抛出calculateStatsForMetric
,如果在那里有抛出代码,则将其包装在try / catch中,并返回一个falsey值。
或在代码中
export const refactored = (measure, metrics, stats) =>
metrics.flatMap(metric => stats.map(stat => ({
metric,
stat,
value: calculateStatsForMetric(stat, metric, measure)
}))).filter(o => o.value);