首页 > 解决方案 > JS | 通过嵌套的“for of”循环递归

问题描述

在学习 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
}

标签: javascriptnode.jsrecursionecmascript-6

解决方案


一个简单的方法是使用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
      });
    }
  });
});

推荐阅读