【问题标题】:Javascript: I need to have an If statement that has a conditional variable (For loop inside If Statement?)Javascript:我需要一个具有条件变量的 If 语句(If 语句中的 For 循环?)
【发布时间】:2013-02-11 00:25:54
【问题描述】:

我有一个二维数组,我正在循环创建一个表。例子: 假设我有array[y][x]。 array[0][x] 将填充标题列,array[1][x] 将创建第二列,依此类推。 y 代表每个类别/行。这有点令人困惑,所以这里有一个图表:

[0][0]Device    | [1][0] Device 1 | [2][0] Device 3 | [3][0] Device 1(Duplicate)
--------------------------------------------------------------------------------
[0][1]category1 | [1][1]          | [2][1]          | [3][1]
--------------------------------------------------------------------------------
[0][2]Category2 | [1][2]          | [2][2]          | [3][2]

我必须检查[y][1] 每一列中的重复项,如果array[y][1] 有重复项,我根本不想打印该列。

我用两个嵌套的 for 循环打印每一列和每一行。

// for every named field, generate a row for each disk
//x represents each table category, which is in rows
for (var x = 0; x < array[0].length; x++) {
    // code to print table with field_names[0][x]
    for (var y = 1; y < (array.length); y++) {
        new_row += "<td>" + [array[y][x]];
    }
}

我目前的想法是每次进程到达 array[y][1] 时,我需要检查它是否与之前列 [y-1][1],[y-2][1] 的值匹配,[y-3][ 1 ] 等等,因为我只想打印表格列的第一个实例。所以我基本上是在寻找一种方法来制作一个 for 或 while 循环,这样不会导致打印狂潮并多次打印我的所有表格。在伪代码中,我需要一些东西:

if array[y][1] == array[i][1] where (i = (y - 1); i &gt; 0; i--),则不打印该列。

唯一的问题是每次我尝试定义 i 时,它都会将其余代码影响到我要打印很多次的地方,因为一切都是如此嵌套的。请帮忙!非常感谢。

【问题讨论】:

  • 为每一行创建一个对象,其属性是以前见过的值。然后在显示列之前检查该属性是否存在。
  • 您应该将数组转置为基于行的数组。这使它更节省内存,您可以轻松地从中remove duplicates

标签: javascript loops for-loop multidimensional-array nested


【解决方案1】:

在打印之前,遍历每一行,记录第一次出现的值。每次看到这条记录不是新的,就不要打印了。

var found, aux;  
for(var y = 1; y < array.length; y++) {

    aux = {};

    for(var x = 0; x < array[0].length; x++) {

       found = false;

       for (var i = 0; i < aux.length; i++) {
           if (aux[i] == array[y][x]) { found = true; break; }
       }

       if (!found) {
          aux.push(array[y][x]);
          //render
       }

    }
}

效率不高,但是...

希望我能帮上忙。

【讨论】:

    【解决方案2】:

    你在你的想法段落中写下了答案。检查if 是否与if 匹配,然后不打印。

    for(var y = 1; y< array.length; y++){
        for(var x = 0; x < array[0].length; x++){
            for(var i = array[0].length; ; i--){
                if(array[y][i] == array[y][x]){
                    //don't print!
                }else{    
                    //print!
                }
            }
        }
    }
    

    就性能而言,这并不是最好的,但它可以确保您不会打印任何重复项。我会考虑做@barmar 建议的为每一行创建一个对象的方法。但是,如果您不想这样做,那么您应该能够实现上述内容来做您想做的事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-26
      • 1970-01-01
      • 2018-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多