2017-12-15 20 views
1

이 질문은 이전 질문 중 하나와 비슷합니다 (removing objects in an object in an array javascript). 그러나 숫자 만있는 대신 실제 값으로 "NaN"이있는 복잡한 숫자가 있습니다. 큰 숫자와 Mathj를 사용하고 있기 때문에 이런 일이 발생할 수 있다고 생각했지만 다른 모든 값은 이미 소수점 이하 15 자리로 흘러 들었습니다. 반환되는 배열 froma의 CONSOLE.LOG (realPowers)는 콘솔 로그에 다음과 같습니다복잡한 배열 자바 스크립트에서 실제 값만 표시

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} 

코드의 첫 번째 줄 아래 복소수의 실제 값을 반환해야하기 때문에이 흥미 롭다. 나는 소수 자릿수의 수를 줄이기 위해에서는 toFixed 방법을 사용하여 for 루프로이 값을 공급하기 위해 노력하고 있어요 : totalPower 원래 배열입니다

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 
}; 

합니다. 하지만 그렇게하면 오류가 반환됩니다 :

toFixed를 문자열에 사용할 수 없기 때문에 (저는 가정합니다).

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 

내가 실수에 대한 소수의 수를 줄이고이 동일하거나 유사한 방법을 사용하여 복잡한 숫자 만 NaN이 부분을 유지할 수 있습니다 :이처럼 보이는 배열을 만들려고 노력하고

?

+0

당신은 "복잡한 숫자의 유지에만 NaN이 부분"에 의해 무엇을 의미합니까? 당신은 당신의 질문을 수정하고, 당신의 견본을 추가 할 수 있습니까? – user184994

+0

'fixPowers()'에 대한'totalPower' 인수의 목적은 무엇입니까? 함수 내에서 변수를 사용하지 마십시오. – Barmar

+0

오류가 발생하면'console.log (powerToFix);'는 무엇을 표시합니까? – Barmar

답변

1

문제는 너무 x && x.rere: NaN와 복소수에 대한 falsey입니다 NaN는 자바 스크립트에서 falsey 간주된다는 것이다. 그런 다음 전체 복소수 인 x을 반환합니다. 속성이 있는지 여부를 테스트하려면 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

위대한 수정. 설명해 주셔서 감사합니다! –

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 
};