2017-12-14 35 views
0

나는이 문제에 대한 연구를 해왔다. 내가 콘솔에서 다음과 같습니다 계산 된 값의 배열을 조작하는 것을 시도하고있다 :이 배열은 내가 함께 왔어요 약간의 수학을 통해 동적을 만들어배열의 객체에있는 객체 제거하기

{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"} 

하기 때문에 입력 된 데이터가없는 것을 I 줄 수 있어요. 나는 위의 배열은 다음과 같이 만들려고 노력 해요 :

{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 

mathjs를 사용하여, 나는 내 식을 평가하고 동적 사항 Array.push 명령을 배열에 값을 추가하고 표시 할 수 있었다. 그러나 내 배열의 결과에서 상수 값이 팝업되면 코드가 중단됩니다.

배열에서 이러한 허수를 어떻게 제거 할 수 있습니까? 즉, 표시된 배열로 밀어 넣기 전에 값의 "im :"부분을 제거해야합니다.

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

하지만 "메신저가 정의되지 않은"콘솔에서 반환

은 내가 다른 사람의 질문과 같은 ( How do I remove a particular element from an array in JavaScript?) 스플 라이스 명령에 이전 답변에서 발견 된 일부 코드를 사용하여이 작업을 수행하려 .

도움을 주시면 대단히 감사하겠습니다.

+1

입력 데이터를 JSON 형식과 예상 출력으로 공유하십시오. –

+0

개체의 "속성"을 제거하려고하고 있으며 해당 키를 문자열 ("im")로 지정해야합니다. – isherwood

+0

이 경우,'im'은 정의되어 있지 않습니다. 당신은 어디에도 정의 할 수 없지만, 당신은 그것을 비교하려고합니다. "if"in "nodeVoltage2"에서 nodeVoltage2에 "im"이라는 키가 있는지 검사 할 수 있습니다. – chrisz

답변

0

배열 map 기능을 사용할 수 있습니다. 기본적으로 배열을 반복합니다. 상품에 .re 속성이있는 경우 그 값만 사용합니다. .re 속성이 없으면 값을 그대로 유지합니다.

삼항 연산자와 화살표 기능을 사용하여 result와 마찬가지로 우리는 속기에 그 쓰기 할 수 있습니다, 또는 우리와 같은 약간 더 자세한하지만 전통적인 방법으로 그것을 쓸 수 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

그게 내가 필요한 것입니다. 고맙습니다. 나는 data.map 메서드 안의 코드에 익숙하지 않다. 그게 뭔지 설명해 주시겠습니까? –

+0

필자는 대답을 업데이트하고 resultTwo를 추가했습니다. 정확하게 똑같은 일을하고 있지만 덜 약식으로 작성되어 있습니다. 설명하는 주석이 있습니다 – user184994

+0

다른 값 집합으로이 작업을 시도했습니다. 전압이 아닌 시스템의 전력)을 계산하고 "NaN"을 실수 부로 사용하여 복잡한 값을 반환합니다. 큰 숫자를 사용하고 있지만 다른 모든 값은 ~ 15 자리로 이동했기 때문에 아마도 그럴 것이라고 생각했습니다. 어떤 일이 발생했을 때만 "NaN"을 표시하도록이 검사 방법을 통합 할 수 있습니까? –