在javascript中使用switch case语句查找索引

时间:2016-08-04 08:20:11

标签: indexing switch-statement kettle e4x pentaho-spoon

我使用Pentaho(ETL)工具使用javascript组件实现输出,该组件接受javascript代码以实现所需的转换。下表从.csv文件(源文件)导入pentaho。 例如,这是我的表结构

 +--------+--------+--------+
| 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数据结构的形式获得所需的结果?任何帮助将不胜感激。谢谢

3 个答案:

答案 0 :(得分:0)

您的代码存在一些问题,请解决它们!

  • 使用中断:您必须使用中断以避免开关移动到低于其匹配的情况。

  • 切换案例不返回类似函数的值,不能使用switch返回来定义变量,需要在switch case中定义变量。

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

  • 数组的排序方式应与每个原始表的排序方式相匹配。

答案 1 :(得分: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;
})

答案 2 :(得分:0)

首先,您无法使用开关语句解决此问题。

在javascript 开关中,您应该提供一个跟随案例之一的值,否则开关将转到如果已定义默认

您的问题似乎是找出3列的较高值并打印出来,逐列逐列添加一个具有最大值的列和您找到它的列的索引。

例如在行上:

1,RLD:0

2,MD:3868

3,INC: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
}