【问题标题】:Create Javascript array with Javascript for loop使用 Javascript for 循环创建 Javascript 数组
【发布时间】:2016-02-10 02:44:23
【问题描述】:

我有一系列信息,我希望通过循环这些信息来缩小它们的大小。这是有效的原始代码:

$('#M1s1').css({'visibility': M1s1v});
$('#M1s2').css({'visibility': M1s2v});
$('#M1s3').css({'visibility': M1s3v});
$('#M1s4').css({'visibility': M1s4v});
$('#M1s5').css({'visibility': M1s5v});
$('#M1s6').css({'visibility': M1s6v});
$('#M1s7').css({'visibility': M1s7v});

$('#M2s1').css({'visibility': M2s1v});
$('#M2s2').css({'visibility': M2s2v});
$('#M2s3').css({'visibility': M2s3v});
$('#M2s4').css({'visibility': M2s4v});
$('#M2s5').css({'visibility': M2s5v});
$('#M2s6').css({'visibility': M2s6v});
$('#M2s7').css({'visibility': M2s7v});

$('#M3s1').css({'visibility': M3s1v});
$('#M3s2').css({'visibility': M3s2v});
$('#M3s3').css({'visibility': M3s3v});
$('#M3s4').css({'visibility': M3s4v});
$('#M3s5').css({'visibility': M3s5v});
$('#M3s6').css({'visibility': M3s6v});
$('#M3s7').css({'visibility': M3s7v});

$('#M4s1').css({'visibility': M4s1v});
$('#M4s2').css({'visibility': M4s2v});
$('#M4s3').css({'visibility': M4s3v});
$('#M4s4').css({'visibility': M4s4v});
$('#M4s5').css({'visibility': M4s5v});
$('#M4s6').css({'visibility': M4s6v});
$('#M4s7').css({'visibility': M4s7v});

$('#M5s1').css({'visibility': M5s1v});
$('#M5s2').css({'visibility': M5s2v});
$('#M5s3').css({'visibility': M5s3v});
$('#M5s4').css({'visibility': M5s4v});
$('#M5s5').css({'visibility': M5s5v});
$('#M5s6').css({'visibility': M5s6v});
$('#M5s7').css({'visibility': M5s7v});

这是我创建的用于尝试减少代码长度和输入错误可能性的 for 循环:

// set smc array(#M1s1, #M1s2, #M1s3, etc.)
var smc = [];
for (m = 1; m < 6; m++) {
  for (s = 1; s < 8; s++) {
    var smc[] = '#M' + m + 's' + s;
  }
}

// set smcv array(#M1s1v, #M1s2v, #M1s3v, etc.)
var smcv = [];
for (mv = 1; mv < 6; mv++) {
  for (sv = 1; sv < 8; sv++) {
    var smcv[] = '#M' + mv + 's' + sv + 'v';
  }
}

// loop to set visibility of small circles
for (i = 0; i < 35; i++) {
  $(smc[i]).css({'visibility': smcv[i]});
}

我对 javascript 循环真的很陌生,感觉我可能忽略了一些基本的东西,甚至是某种语法错误,但无法确定问题所在。任何指导或帮助将不胜感激!

更新

这是我的问题的最终解决方案:

//set smc array(#M1s1, #M1s2, #M1s3, etc.)
    var smc = [];
        for (m = 1; m < 6; m++) {
            for (s = 1; s < 8; s++) {
                smc.push('#M' + m + 's' + s);
            }
        }

//set smcv array(#Ms1v, #M1s2v, #M1s3v, etc.)
    var smcv = [];
        for (mv = 1; mv < 6; mv++) {
            for (sv = 1; sv < 8; sv++) {
                smcv.push('M' + mv + 's' + sv + 'v');
            }
        }

//loop to set visibility of small circles
    for (i = 0; i < 35; i++) {
        $(smc[i]).css({'visibility': window[smcv[i]]});
    }

【问题讨论】:

  • @dvenkatsagar - 数字将通过加法运算符强制转换为字符串。
  • 您需要了解Arrays - 特别是您案例中的 .push 方法...然后您需要意识到变量M1s1v 与字符串"M1s1v" 不同。 . 但是名为M1s1v 的全局变量可以像window['M1s1v'] 一样访问
  • M1s1v是不是有一定值的变量??

标签: javascript jquery arrays loops


【解决方案1】:

您不能使用 var smc[] = 'something' 将值推送到数组。
使用smc.push( 'something' )

【讨论】:

  • 这绝对是我期待的方向。所有数组都完美填充,但是现在我的循环无法正常工作。该循环将所有可见性默认为“可见”。我认为这是因为smcv[] 实际上是一个变量名数组,看起来它们可能被存储为字符串。有解决办法吗?
  • 我现在有这个工作。答案已随解决方案更新。
【解决方案2】:

假设 M1s1v,M1s2v,.... 值来自 json 变量,如下所示:

var x = {
  M1s1v : "hidden",
  M1s2v : "visibile",
  ...
}

然后您可以将代码缩短为如下所示:

for (m = 1; m < 6; m++) {
    for (s = 1; s < 8; s++) {
        $('#M' + m + 's' + s).css({'visiblity':x['M'+m+'s'+s+'v']});
    }
}

希望对你有帮助。

【讨论】:

    【解决方案3】:

    假设您有一个二维数组,5 x 7 用于 M 和 s 保存的东西将评估为真/假(布尔值、0、1、空字符串...)。

    var data = [][];
    ...
    for (var M=0; M < data.length; M++) {
        for (var s=0; s < data[M].length; M++) {
            $('#M' + (M+1) + 's' + (s+1)).css({'visibility': data[M][s] ? 'visible' : 'hidden'});
        }
    }
    

    如果你是维度的百分号,你可以通过使用硬编码数字而不是长度来“优化”。

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 2021-09-11
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多