リファクタリング

レビューしていると、処理がどう流れているからわからんから、ちょっと整理させてね…… ってことがよくある。

@@ -22,22 +22,17 @@ var ResultsUtils = (() => {
         return active_status.includes(job.status);
     };
     var _parseMonitoringReport = function(result) {
-        if(result.train_status || result.monitoring_report) {
-            var monitoring_report = result.train_status ? result.train_status.monitoring_report : result.monitoring_report;
-            result.costs = [];
-            result.training_errors = [];
-            result.validation_errors = [];
-            if(monitoring_report) {
-                Object.keys(monitoring_report).forEach((key) => {
-                    result.costs.push(monitoring_report[key].cost);
-                    result.training_errors.push(monitoring_report[key].train_error ? monitoring_report[key].train_error : 0);
-                    result.validation_errors.push(monitoring_report[key].valid_error ? monitoring_report[key].valid_error : 0);
-                });
-                result.current_epoch = Object.keys(monitoring_report).length;
-            }
-            result.train_status
-                ? delete result.train_status.monitoring_report
-                : delete result.monitoring_report
+        if (result.train_status || result.monitoring_report) {
+            var report = (result.train_status || result).monitoring_report || {};
+            var indices = Object.keys(report).sort((a, b) => a - b);
+            var valueOf = key => index => report[index][key] || 0;
+            Object.assign(result, {
+                current_epoch: indices.length,
+                costs: indices.map(valueOf('cost')),
+                training_errors: indices.map(valueOf('train_error')),
+                validation_errors: indices.map(valueOf('valid_error')),
+            });
+            delete (result.train_status || result).monitoring_report;
         }
         return result;
     };

こんなことしてるから、時間がいくらあっても足りないわけだけれど。

わたしが書き直す前とあととで、どちらがプログラマー諸君にとってより読みやすいか、というのは、ほんと聞いてみたい。
いや、聞いたら、自信を失うかもしれない。