2017-12-15 4 views
1

Diese Frage ist ähnlich einer meiner vorherigen Fragen (removing objects in an object in an array javascript). Anstatt jedoch nur Zahlen zu haben, gibt es auch komplexe Zahlen mit "NaN" als den realen Werten. Ich dachte, das könnte passieren, da ich große Zahlen und Mathjs verwende, aber alle anderen Werte sind bereits auf ~ 15 Dezimalstellen verschoben. Das zurückgegebene Array froma console.log (realPowers) sieht wie folgt in dem Konsolenprotokoll:nur realen Wert von komplexen Array anzeigen Javascript

0:0 
1:91.51069578156118 
2:183.02210760273937 
3:277.73380284266796 
4:376.47588381083307 
5:481.85928667762994 
6:599.6533611633058 
7:752.8633763048005 
8:Complex {re: NaN, im: -0.015021590179814361} 
9:Complex {re: NaN, im: -0.029563247908981544} 
10:Complex {re: NaN, im: -0.047829041780228475} 

Dies ist insofern interessant, als die erste Zeile Code unten sollte nur die realen Werte der komplexen Zahlen zurückzukehren. Ich versuche, diese Werte in einer for-Schleife zu füttern die toFixed Verfahren unter Verwendung der Anzahl der Dezimalstellen zu reduzieren:

var realPowers = results.totalPower.map((x) => x && x.re ? x.re :x); 

function fixPowers(realPowers) { 

    var k,fixedPower,powerToFix 

    for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) { 
    powerToFix = realPowers[k]; 
    fixedPower = powerToFix.toFixed(3); 
    fixedRealPowers.push(fixedPower); 
    } 
    return fixedRealPowers 
}; 

Wo totalPower das ursprüngliche Array ist. Aber wenn ich tun, dass es einen Fehler zurückgibt:

powerToFix.toFixed is not a function 

seit toFixed kann nicht an einer Schnur verwendet werden (ich gehe mal davon aus).

Ich versuche, eine Reihe zu machen, die wie folgt aussieht:

0:0 
1:91.51069578156118 
2:183.02210760273937 
3:277.73380284266796 
4:376.47588381083307 
5:481.85928667762994 
6:599.6533611633058 
7:752.8633763048005 
8:NaN 
9:NaN 
10:NaN 

Kann ich die Anzahl der Dezimalstellen für die reellen Zahlen zu reduzieren und nur den NaN Teil der komplexen Zahlen hält das gleiche oder ein ähnliches Verfahren unter Verwendung von ?

+0

Was meinen Sie mit "halten nur die NaN Teil der komplexen Zahlen"? Könntest du deine Frage ändern und ein Beispiel hinzufügen, was du magst? – user184994

+0

Was ist der Zweck des 'totalPower'-Arguments für' fixPowers() '? Sie verwenden die Variable niemals innerhalb der Funktion. – Barmar

+0

Was zeigt 'console.log (powerToFix);', wenn Sie diesen Fehler erhalten? – Barmar

Antwort

1

Das Problem ist, dass NaN Falsey in Javascript betrachtet wird, so x && x.re ist falsey für die komplexen Zahlen mit re: NaN. Es gibt dann x zurück, was die ganze komplexe Nummer ist. Wenn Sie testen möchten, ob eine Eigenschaft vorhanden ist, verwenden Sie die Methode hasOwnProperty().

function Complex(real, imag) { 
 
    return {re: real, im: imag}; 
 
} 
 
var results = { 
 
    totalPower: [ 
 
    0, 
 
    91.51069578156118, 
 
    183.02210760273937, 
 
    277.73380284266796, 
 
    376.47588381083307, 
 
    481.85928667762994, 
 
    599.6533611633058, 
 
    752.8633763048005, 
 
    Complex(NaN, -0.015021590179814361), 
 
    Complex(NaN, -0.029563247908981544), 
 
    Complex(NaN, -0.047829041780228475) 
 
    ] 
 
}; 
 

 
var realPowers = results.totalPower.map((x) => x && x.hasOwnProperty('re') ? x.re :x); 
 

 
function fixPowers() { 
 

 
    var k,fixedPower,powerToFix 
 

 
    for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) { 
 
    powerToFix = realPowers[k]; 
 
    fixedPower = powerToFix.toFixed(3); 
 
    fixedRealPowers.push(fixedPower); 
 
    } 
 
    return fixedRealPowers 
 
}; 
 

 
console.log(fixPowers());

+0

Großartige Lösung. Danke für die Erklärung! –

0
var realPowers = results.totalPower.map((x) => x && x.re ? x.re :x); 

function fixPowers(totalPower) { 

    var k,fixedPower,powerToFix 

    for (k=0,fixedRealPowers=[]; k < realPowers.length; k++) { 
    powerToFix = realPowers[k]; 

    fixedPower = isNaN(powerToFix) ? powerToFix : powerToFix.toFixed(3); 
    fixedRealPowers.push(fixedPower); 
    } 
    return fixedRealPowers 
};