2016-08-04 3 views
0

원하는 변환을 얻기 위해 자바 스크립트 코드를 사용하는 자바 스크립트 구성 요소를 사용하여 출력을 얻으려면 Pentaho (ETL) 도구를 사용하고 있습니다. 다음 표는 .csv 파일에서 가져온 것입니다. (소스 파일). 예를 들어 이 내가 나에게 MAX_VALUE 및 인덱스 번호 등 내 출력 처럼 보일 것이라고 출력 표를 줄 것이다 스크립트를 사용하려면 내 테이블 구조자바 스크립트에서 switch case 문을 사용하여 인덱스 찾기

+--------+--------+--------+ 
| RLD | MD  | INC | 
+--------+--------+--------+ 
|  0 | 3868 | 302024 | 
| 53454 | 7699 | 203719 | 
| 154508 | 932 | 47694 | 
| 107547 | 36168 | 83592 | 

입니다

+--------+--------+--------+-----------+-----------+ 
    | RQD | MT  | IZC | max_value | max_index | 
    +--------+--------+--------+-----------+-----------+ 
    |  0 | 3868 | 302024 | 302024 |   3 | 
    | 53454 | 7699 | 203719 | 203719 |   3 | 
    | 154508 | 932 | 47694 | 154508 |   1 | 
    | 456 | 107547| 83592 | 107547 |   2 | 

내가

var max_value = Math.max(RQD,MT,IZC); 
println(max_value); 

를 사용한 행에서 최대 값을 얻으려면 나는를 얻기 위해 노력 다음 스크립트를 사용하여 색인을 생성하십시오.

var max_index = switch (Math.max(RQD,MT,IZC)) 
      { 
      case "RQD":document.write("1") 
      case "MT":document.write("2") 
      case "MT":document.write("3") 
     default:document.write("0") 

     } 

어떻게하면 JavaScript 데이터 구조의 형태로 원하는 결과를 얻을 수 있습니까? 어떤 도움을 많이 주시면 감사하겠습니다. 감사합니다.

+0

무엇을 설명해주십시오 당신은 숫자 값으로 만 변수가있는 경우

, 당신은 다음과 같이보다 더 아무것도 할 수 * RQD *, * MT * 및 * IZC * 변수 안에 있습니다. –

+0

모든 변수에 표 형식으로 저장된 숫자 (정수)가 포함되어 있습니다. – Deepesh

+0

최대 값이 아닌 문자열을 입력해야하므로 스위치가 잘못되었습니다. 열과 인덱스를 저장하려면 구조체가 있어야하며 최대 값을 직접 확인해야합니다. –

답변

0

코드에 몇 가지 문제점이 있으며 해결할 수 있습니다!

  • 휴식 시간 사용 : 스위치가 일치 항목 아래로 이동하지 않도록 휴식 시간을 사용해야합니다.

  • 스위치 케이스는 함수와 같은 값을 반환하지 않으며 스위치 반환을 사용하여 변수를 정의 할 수 없으므로 스위치 케이스 내부에서 변수를 정의해야합니다.

  • Math.max는 최대 변수의 이름을 반환하지 않고 지정된 매개 변수에서 최대 number을 반환합니다. 당신이 있기 때문에 내가 +1을 사용

    var tableArray = [RQD,MT,IZC]; 
    var maxIndex = tableArray.indexOf(Math.max.apply(null, arr)); 
    if(maxIndex > -1) document.write(maxIndex+1); 
    
    • :

  • 이 문제를 해결하기 위해, 나는 그러나 귀하의 질문에 대답하기 위해, 정직하게 math.max와 스위치 케이스를 사용하지 것이다 0 대신 1에서 시작하는 예제 표의 색인.

  • 배열이 정렬되는 방식은 표가 원시마다 정렬되는 방식과 일치해야합니다. 모든

+0

편집이 게시되었습니다. – Deepesh

+0

이 println 글 머리 기호를 제거했는지 확인하십시오. 전환 코드없이 사례를 해결해야합니다. – Bamieh

+0

코드는 -1로 항상 인덱스 값을 반환합니다. – Deepesh

0
var list = [ 
{RLD:0, 
MD:3868, 
INC:302024 
}, 
{RLD:53454, 
MD:7699, 
INC:203719 
}, 
{RLD:154508, 
MD:932, 
INC:47694 
}, 
{RLD:107547, 
MD:36168, 
INC:83592 
}, 
]; 

list = list.map(function(item){ 
    var keys = Object.keys(item); 
    item.max_value = item[keys[0]]; 
    item.max_index = ''; 
    for(var i = 1, l = keys.length; i < l; i++) { 
    var key = keys[i]; 
    var keyValue = item[key]; 
    if (item.max_value < keyValue){ 
     item.max_value = keyValue; 
     item.max_index = key; 
    } 
    } 
    return item; 
}) 
+0

편집이 게시되었습니다. – Deepesh

+0

을 확인하십시오. 변수 값을 수동으로 입력하지 않아도됩니다. 열만 고려하면 안됩니까? – Deepesh

0

먼저 당신은 스위치 문을 사용하여이 문제를 해결할 수 있습니다. 정의 된 경우에는 다음 경우 (들)의 하나 인 값을 제공해야 자바 스크립트 스위치에서

는, 그렇지 않으면 스위치기본로 이동합니다.

귀하의 문제는 3 열의 더 높은 값을 찾아서 인쇄하여 행별로 열을 최대 값이있는 열과 발견 한 열의 색인을 추가하여 인쇄하는 것으로 보입니다.

따라서 행의 예 :

1 RLD : 0

2 MD : 3868

3 INC : 302,024

이 경우 높은 값 이고 INC과 열 색인 . 당신은 이런 식으로 너무 객체를 반환 할 수

function getMaxValueRow (RLD, MD, INC) { 

    var max_value = RLD; 
    var max_index = 1; 

    if (MD > max_value) { 
     max_value = MD; 
     max_index = 2; 
    } 

    if (INC > max_value) { 
     max_value = INC; 
     max_index = 3; 
    } 

    return [RLD, MD, INC, max_value, max_index]; 
} 

:

retrun { 
    'RQD': RLD, 
    'MT': MD, 
    'IZC': INC, 
    'max_value': max_value, 
    'max_index': max_index 
}