2017-05-30 3 views
2

Ich habe verstanden, dass ich den globalen Geltungsbereich davon ändern muss, weil in der Schleife bezieht sich dies auf das Fensterobjekt. Aber wenn ich versuche, über eine Funktion eine Variable in meiner foreach-Schleife zu definieren, seine nicht funktioniert und ich weiß nicht, warum, obwohl mein functio den richtigen Wert zurückgibt :(Aufruf Benutzerfunktion in foreach Schleife

// simple class for xml import 
function io() { 
    this.vertexes = []; 
    this.getVertexByID = function(id) { 
    this.vertexes.forEach(function(entry) { 
     if (id == entry.id) { 
     // correct element found, displayed and returned 
     console.log(entry); 
     return entry; 
     } 
    }); 
    } 

    this.importXML = function(xmlString) { 
    cells = this.xmlToJson(xmlString); 

    var parent = graph.getDefaultParent(); 
    var _this = this; 
    graph.getModel().beginUpdate(); 
    try { 
     // addEdges   
     cells.XMLInstance.Edges.Relation.forEach(function(entry) { 
     // both will be empty but i dont understand why :(
     fromVertex = _this.getVertexByID(entry.fromNode); 
     toVertex = _this.getVertexByID(entry.toNode); 
     var e1 = graph.insertEdge(parent, null, '', fromVertex, toVertex); 
     }); 
    } finally { 
     graph.getModel().endUpdate(); 
    } 
    } 
+0

Ihnen fehlt das abschließende '}'. –

+0

@PatrickBarr Nr. 'El' wird mit' var' deklariert, was es auf die Funktion überträgt. Wenn es mit "let" deklariert würde, hätte es einen Blocklevel-Bereich. 'var' deklarierte Variablen sind auf ihre umschließende Funktion oder Global beschränkt, wenn sie nicht in einer Funktion enthalten sind. Der tatsächliche Ort der Deklaration spielt keine Rolle, da die Deklarationen gehisst werden. –

Antwort

4

einen Wert in einem forEach Rückruf Rückkehr hat keine Wirkung. es ist sicherlich nicht der Rückgabewert der Funktion, die die forEach Teil ist

So dies ändern.

this.vertexes.forEach(function (entry) { 
    if(id==entry.id){ 
     //correct element found,displayed and returned 
     console.log(entry); 
     return entry; 
    } 
}); 

dazu:

return this.vertexes.find(function (entry) { 
    return id==entry.id; 
});