2017-08-07 3 views
0

Ich bin ein Anfänger mit node.js und ich habe ein Problem nach Auswertung evalMath() Funktion. Insbesondere den Wert Math2 yScale zuweisen.Weisen Sie Wert zu einer Variablen in node.js

Math2 ist ein Eingabefeld einer Webseite, in dem eine einfache Gleichung wie 'Ir = Vr/R' eingeführt wird. Dieser Zeichenfolgenwert wird von der Webseite an den Webserver übergeben, der auf node.js implementiert ist. Dort wird die Funktion evalMath() ausgeführt, die Vr (mit einer Zeichenkette) und R durch einen entsprechenden ganzzahligen Wert ersetzt. Nach Ausführung dieser Funktion erhält man so etwas wie 'ANI0 [i] -ANI5 [i]/10', das in der Variablen Math2 gespeichert ist. Die Funktion funktioniert einwandfrei. Wenn Math2 jedoch yScale zugewiesen ist, wird nur 'Ir = Vr/R' gespeichert und nicht die Zeichenfolge, die nach Ausführung von evalMath() -> 'ANI0 [i] -ANI5 [i]/10' erhalten wird. Ich weiß nicht genau warum.

if (yScale == 'Math2') { 
    console.log('Math2 selected'); 
    evalMath(textAD0,textAD1,textAD2,textAD3,textAD4,Math2,Rb,Rc,R,yScale); 
    yScale = Math2; 
    console.log ("yScale: "+ yScale); 
} else { 
    console.log("Nothing to change :) - No eqn"); 
} 

function evalMath(labelAD0, labelAD1, labelAD2, labelAD3, 
       labelAD4, entry, entry1, entry2, entry3, entry4) { 
    iAD0="",iAD1="",iAD2="",iAD3="",iAD4="",iR="",iRb="", iRc="", iEq=""; 

    var iAD0 = entry.search(labelAD0); 
    var iAD1 = entry.search(labelAD1); 
    var iAD2 = entry.search(labelAD2); 
    var iAD3 = entry.search(labelAD3); 
    var iAD4 = entry.search(labelAD4); 
    var iR = entry.search('R'); 
    var iRb = entry.search('Rb'); 
    var iRc = entry.search('Rc'); 
    var iEq = entry.search('=');  

    if (iAD0 > "0"){ entry = entry.replace(labelAD0,'(ANI0[i]-ANI5[i])'); } 
    else{console.log("Nothing to change AD0")} 
    if (iAD1 > "0"){ entry = entry.replace(labelAD1,'(ANI1[i]-ANI5[i])'); } 
    else{console.log("Nothing to change AD1")} 
    if (iAD2 > "0"){ entry = entry.replace(labelAD2,'(ANI2[i]-ANI5[i])'); } 
    else{console.log("Nothing to change AD2")} 
    if (iAD3 > "0"){ entry = entry.replace(labelAD3,'(ANI3[i]-ANI5[i])'); } 
    else{console.log("Nothing to change AD3")} 
    if (iAD4 > "0"){ entry = entry.replace(labelAD4,'(ANI4[i]-ANI5[i])'); } 
    else{console.log("Nothing to change AD4")} 
    if (iRb > "0"){ entry = entry.replace('Rb',entry1); } 
    else{console.log("Nothing to change Rb")} 
    if (iRc > "0"){ entry = entry.replace('Rc',entry2); } 
    else{console.log("Nothing to change Rc")} 
    if (iR > "0"){ entry = entry.replace('R',entry3); } 
    else{console.log("Nothing to change R")} 
    if (iEq > "0"){ entry = entry.slice(iEq+1,entry.length); } 
    else{console.log("Nothing to change iEq")} 

    console.log("entry: " + entry); 
    return entry; 
} 

Antwort

0

Wenn übergeben Sie einen Parameter an eine Funktion, nur der Wert übergeben wird und nicht die Referenz der Variablen (für String, int, float, etc ...). Wenn Sie in der Lage sein, den Wert der Parameter zu ändern, übergeben Sie es durch ein Objekt:

var a = "hello"; 
var b = "moto"; 

var obj = {a: "hello", b: "moto"}; 

function c(p1, p2){ p1 = "yala"; p2="yele";} 

c(a, b); // a == hello, b == moto, values not changed 

function c2(p1) { p1.a = "yala"; p1.b = "yele";} 

c2(obj); // obj.a == "yala", obj.b == "yele" 

Also in Ihrem Fall wie folgt vor:

var entries = { 
Math2: Math2, 
Rb: Rb, 
Rc: Rc, 
R: R 
yScale: yScale 
}; 


evalMath(textAD0,textAD1,textAD2,textAD3,textAD4,entries); 
entries.yScale = entries.Math2; 
console.log ("yScale: "+ entries.yScale); 

Dann ersetzen Prototyp evalMath mit

En dann in EvalMath, ersetzen Sie alle Vorkommen von Eintrag1 durch Einträge.Math2, alle Vorkommen von Eintrag2 mit Einträgen.Rb, alle Vorkommen von Eintrag3 mit Einträgen.Rc, alle Vorkommen von Eintrag4 mit Einträgen.R und Alle Vorkommen aus entry5 mit entries.yScale

Warnung, wenn Sie einige Werte auf Einträge beeinflussen. Es wird aus der Funktion

geändert werden
Verwandte Themen