2016-08-04 2 views
0

Я использую инструмент Pentaho (ETL) для достижения результата с использованием компонента javascript, который принимает код javascript для достижения желаемого преобразования. Следующая таблица импортируется в pentaho из CSV-файла (исходный файл). Например, это моя структураПоиск индекса с использованием оператора case switch в javascript

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

таблицы Я хочу использовать скрипт, который дал бы мне max_value и его индексный номер, такой, что мой выход будет выглядеть Output Таблица

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

Я пытался получить ir с использованием следующего сценария

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 по заданным параметрам.

, чтобы решить эту проблему, я бы не использовать случай переключатель с Math.max быть честным, однако ответить на ваш вопрос:

var tableArray = [RQD,MT,IZC]; 
var maxIndex = tableArray.indexOf(Math.max.apply(null, arr)); 
if(maxIndex > -1) document.write(maxIndex+1); 
  • я использовал +1, потому что у вас есть ваш индекс в таблице примеров, начиная с 1, а не 0.

  • способ сортировки массива должен соответствовать способу сортировки таблицы на сырье.

+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: 302024

В этом случае, чем выше значение 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 
} 
Смежные вопросы