使用Javascript for循环创建Javascript数组

时间:2016-02-10 02:44:23

标签: javascript jquery arrays loops

我有一系列信息,我希望通过循环信息来缩小规模。以下是正在运行的原始代码:

$('#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]]});
    }

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

让我们说M1s1vM1s2v,....值来自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']});
    }
}

希望它有所帮助。

答案 2 :(得分:0)

假设你有一个二维数组,5 x 7代表M和s持有将评估为true / false的东西(boolean,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'});
    }
}

你可以&#34;优化&#34;通过使用硬编码数字而不是长度,如果你是维度的厘米。