2016-08-04 87 views
0

我使用Pentaho(ETL)工具来实现使用javascript组件接受javascript代码以实现所需转换的输出。下表从.csv文件导入到pentaho中(源文件)。 例如,这是我的表结构在javascript中使用switch case语句查找索引

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

我试图让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

首先,你不能用开关语句解决这个问题。

在JavaScript 开关你应该提供一个值,是遵循情况(S)之一,否则,如果定义的开关会去默认

你的问题似乎是要找出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 
}