2017-12-14 9 views
0

Ich habe einige Untersuchungen zu diesem Thema durchgeführt. Ich versuche, eine Reihe von berechneten Werte zu manipulieren, die wie folgt in der Konsole aussieht:Entfernen von Objekten in einem Objekt in einem Array Javascript

{nodeVoltages: Array(11), totalPower: Array(1), xlength: Array(11)} 
    nodeVoltages: Array(11) 
    0:48 
    1:47.71306060387108 
    2:47.250273223993105 
    3:46.59686907269243 
    4:45.71876416434013 
    5:44.53304242029258 
    6:42.745236969423615 
    7:Complex {re: 40.38334500994142, im:1.919295696316476, __ember1513267958317: "ember368"} 
    8:Complex { re:39.55961661806138, im:3.8933604519196416, __ember1513267958317: "ember369"} 

Dieses Array dynamisch durch einige mathematische erstellt ist, dass ich mit so habe kommen gibt es keine Eingangsdaten, die ich kann dir geben. Ich versuche, die über Array wie folgt aussehen zu lassen:

{nodeVoltages: Array(11), totalPower: Array(1), xlength: Array(11)} 
    nodeVoltages: Array(11) 
    0:48 
    1:47.71306060387108 
    2:47.250273223993105 
    3:46.59686907269243 
    4:45.71876416434013 
    5:44.53304242029258 
    6:42.745236969423615 
    7:40.38334500994142 
    8:39.55961661806138 

Mit mathjs konnte ich meine Ausdrücke auswerten und dynamisch die Werte in ein Array mit dem Array.push Befehl hinzufügen und sie anzuzeigen. Mein Code bricht jedoch, sobald die imaginären Werte in den Ergebnissen meines Arrays auftauchen.

Wie kann ich diese imaginären Zahlen aus meinem Array entfernen? Mit anderen Worten, ich muss die "im:" - Teile der Werte entfernen, wenn sie erscheinen, bevor ich sie in das angezeigte Array schiebe.

Ich habe versucht, dies mit einigem Code zu tun, die ich von einer früheren Antwort auf jemandem andere Frage (How do I remove a particular element from an array in JavaScript?) Spleiß Befehl wie folgt gefunden:

 var nodeVoltage2 = parser.eval(expression2); 

//checks if there are imaginary values and removes them 

      if ("im" in nodeVoltage2) { 
       nodeVoltage2.splice(2,1) 
      } 

//adds value to result array for analysis 

     nodeVoltages.push(nodeVoltage2); 

aber es gibt in der Konsole, die „im nicht definiert ist“ .

Jede Hilfe wird sehr geschätzt!

+1

Bitte teilen Sie Ihre Eingabedaten im JSON-Format und erwartete Ausgabe. –

+0

Sie versuchen, "Eigenschaften" der Objekte zu entfernen, und Sie müssen ihre Schlüssel als Zeichenfolgen adressieren ("im"). – isherwood

+0

In diesem Fall ist 'im' nicht definiert. Du definierst es nie irgendwo, dennoch nennst du einen Vergleich dazu. Du könntest etwas wie "if" im "in nodeVoltage2" machen, was überprüfen würde, ob nodeVoltage2 einen Schlüssel mit dem Namen 'im' – chrisz

Antwort

0

Sie können das Array map Funktion verwenden. Grundsätzlich durchlaufen wir das Array. Wenn der Artikel eine .re Eigenschaft hat, nehmen wir nur diesen Wert. Wenn keine .re Eigenschaft vorhanden ist, behalten wir den Wert unverändert bei.

Wir können entweder schreiben, dass in Kurzschrift, wie bei result der ternären Operator und Pfeil-Funktion, oder wir können es in eine etwas ausführlichen schreiben, aber traditionellen Art und Weise, wie mit resultTwo

let data = [ 
 
    48 
 
    ,47.71306060387108 
 
    ,47.250273223993105 
 
    ,46.59686907269243 
 
    ,45.71876416434013 
 
    ,44.53304242029258 
 
    ,42.745236969423615 
 
    ,{re: 40.38334500994142, im:1.919295696316476, __ember1513267958317: "ember368"} 
 
    ,{ re:39.55961661806138, im:3.8933604519196416, __ember1513267958317: "ember369"} 
 
] 
 

 
let result = data.map((x) => x && x.re ? x.re : x); 
 

 

 
let resultTwo = data.map(function(elem) { 
 
    // First, we need to check that the array element is not null/undefined 
 
    // We then need to check that it has a property called re that is also not null/undefined 
 
    if (elem != null && elem.re != null) { 
 
     // Just return the property we're interested in 
 
     return elem.re; 
 
    } else { 
 
     // Return the element as is 
 
     return elem; 
 
    } 
 
}); 
 

 
console.log(result); 
 
console.log(resultTwo);

+0

Genau das habe ich gebraucht. Vielen Dank. Ich kenne den Code in der data.map-Methode nicht. Können Sie erklären, was das ist? –

+0

Absolut, ich habe meine Antwort aktualisiert und resultTwo, was genau die gleiche Sache macht, aber in einer weniger abgekürzt, mit Kommentaren zu erklären, was es macht – user184994

+0

Ich habe versucht, dies mit einer anderen Reihe von Werten (Werte für Macht des Systems und nicht die Spannungen) und es gibt komplexe Werte mit "NaN" als reellem Teil zurück. Ich dachte, das käme vielleicht, weil ich große Zahlen verwende, aber alle meine anderen Werte gehen auf ~ 15 Dezimalstellen. Gibt es eine Möglichkeit, diese Methode zu verwenden, um nur "NaN" anzuzeigen, wenn das passiert? –

Verwandte Themen