Поиск индекса с использованием оператора switch case в javascript

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

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

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

 +--------+--------+--------+-----------+-----------+
    | 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? Любая помощь будет высоко оценена. Спасибо


person Deepesh    schedule 04.08.2016    source источник
comment
Пожалуйста, объясните, что находится внутри переменных RQD, MT и IZC.   -  person Mario Santini    schedule 04.08.2016
comment
все переменные содержат числа (целые числа), хранящиеся в табличном формате   -  person Deepesh    schedule 04.08.2016
comment
Ваш переключатель неверен, так как вы должны указать строку, а не максимальное значение. Вы должны иметь структуру и самостоятельно проверять максимальное значение, чтобы сохранить столбец и индекс.   -  person Mario Santini    schedule 04.08.2016
comment
В пост внесены изменения, проверьте   -  person Deepesh    schedule 04.08.2016
comment
Вы должны добавить, как вы получаете переменные со значениями записи. Как я вижу, вы публикуете, как вы обрабатываете данные одной записи. И еще, вы не сказали, как должны выглядеть результаты: html-таблица? структура данных javascript? Что-то другое?   -  person Mario Santini    schedule 04.08.2016
comment
хотите увидеть результат в структуре данных javascript   -  person Deepesh    schedule 04.08.2016
comment
пожалуйста, обновите свой вопрос с помощью этой информации. Это облегчило задачу тем, кто хочет помочь.   -  person Mario Santini    schedule 04.08.2016
comment
@MarioAlexandroSantini готово   -  person Deepesh    schedule 04.08.2016


Ответы (3)


Есть несколько проблем с вашим кодом, давайте решим их!

  • Используйте разрывы: вы должны использовать разрывы, чтобы избежать переключения переключателя на случаи ниже его совпадения.

  • Случаи переключения не возвращают значение, как функции, вы не можете использовать возврат переключателя для определения переменной, вам нужно определить переменную внутри случая переключения.

  • 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.

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

person Bamieh    schedule 04.08.2016
comment
В пост внесены изменения, проверьте - person Deepesh; 04.08.2016
comment
удалил точку маркера println, попробуйте мой код, он должен решить ваш случай без переключателя. - person Bamieh; 04.08.2016
comment
Это странное поведение чайника. По-видимому, вывод функций не является экземпляром числа, а элементы массива, введенные из Kettle, являются числами. Следующий код работает по какой-то причине: var tableArray = [RQD, MT, IZC].map(Number); var maxResult = Math.max.apply(null, tableArray); var maxIndex = tableArray.indexOf(maxResult); - person Andrei Luksha; 11.08.2016

Во-первых, вы не можете решить эту проблему с помощью оператора switch.

В переключателе javascript вы должны указать значение, которое является одним из следующих case(ов), иначе переключатель перейдет к по умолчанию, если определено.

Кажется, ваша проблема заключается в том, чтобы узнать более высокое значение 3 столбцов и распечатать, столбцы построчно добавляют столбец с максимальным значением и индексом столбца, в котором вы его нашли.

Так, например, в строке:

1, СБН : 0

2, MD : 3868

3, ИНК: 302024

В этом случае большее значение равно INC с индексом столбца 3.

Если у вас есть только переменные с числовыми значениями, вы можете сделать только что-то вроде этого:

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
}
person Mario Santini    schedule 04.08.2016

person    schedule
comment
В пост внесены изменения, проверьте - person Deepesh; 04.08.2016
comment
Значения переменных нельзя вводить вручную, нельзя ли рассматривать только столбец. - person Deepesh; 04.08.2016