Modernize ES for-loops and remove problematic for-in loops
This slightly modifies the behaviour of errors (see init.js)
Change-Id: I1aab691d5b7e8167b6213378bdd9139c133202cd
diff --git a/dev/js/src/match/treearc.js b/dev/js/src/match/treearc.js
index 6f0690b..2acda9b 100644
--- a/dev/js/src/match/treearc.js
+++ b/dev/js/src/match/treearc.js
@@ -61,8 +61,7 @@
       // Iterate over edge lists
       // TODO:
       //   Support spans for anchors!
-      for (var i in edges) {
-        var edge = edges[i];
+      edges.forEach(function(edge) {
 
         // Check the target identifier
         var targetID = edge.targetID;
@@ -88,7 +87,7 @@
           // console.log(relation);
           this.addRel(relation);
         };
-      };
+      }, this);
 
       // Reset parsing memory
       this.temp = {};
@@ -100,8 +99,7 @@
     _parse : function (parent, children, mark) {
 
       // Iterate over all child nodes
-      for (var i in children) {
-        var c = children[i];
+      children.forEach(function(c) {
 
         // Element node
         if (c.nodeType == 1) {
@@ -230,8 +228,8 @@
               this.temp['pos']++;
             };
           };
-        }
-      };
+        };
+      }, this);
 
       // Todo: define edges here!
     },
@@ -612,13 +610,7 @@
 
       // Add sorted arcs and anchors
       this._sortedArcs    = lengthSort(sortedArcs, false);
-
-      // Translate map to array (there is probably a better JS method)
-      var sortedAnchors = [];
-      for (var i in anchors) {
-        sortedAnchors.push(anchors[i]);
-      };
-      this._sortedAnchors = lengthSort(sortedAnchors, true);
+      this._sortedAnchors = lengthSort(Object.keys(anchors), true);
     },
 
     /**
@@ -671,18 +663,18 @@
       ws.style.textAnchor = "start";
       
       var lastRight = 0;
-      for (var node_i in this._tokens) {
+      this._tokens.forEach(function(node_i) {
         // Append svg
         // var x = text.appendChild(this._c("text"));
         var tspan = text.appendChild(this._c("tspan"));
-        tspan.appendChild(d.createTextNode(this._tokens[node_i]));
+        tspan.appendChild(d.createTextNode(node_i));
         tspan.setAttribute("text-anchor", "middle");
         
         this._tokenElements.push(tspan);
 
         // Add whitespace!
         tspan.setAttribute("dx", this.tokenSep);
-      };
+      }, this);
 
       // Get some global position data that may change on resize
       var globalBoundingBox = this._rect(g);
@@ -702,15 +694,14 @@
         this._sortArcs();
 
       // 1. Draw all anchors
-      var i;
-      for (i in this._sortedAnchors) {
-        this._drawAnchor(this._sortedAnchors[i]);
-      };
+      this._sortedAnchors.forEach(
+        i => this._drawAnchor(i)
+      );
 
       // 2. Draw all arcs
-      for (i in this._sortedArcs) {
-        this._drawArc(this._sortedArcs[i]);
-      };
+      this._sortedArcs.forEach(
+        i => this._drawArc(i)
+      );
 
       // Resize the svg with some reasonable margins
       var width = this._rect(text).width;