【问题标题】:For loop without the switch没有开关的for循环
【发布时间】:2014-09-01 10:28:58
【问题描述】:

我想知道是否有更好的方法来编写这个不带 switch 语句的 for 循环。请忽略 for 循环中的 append,这只是为了演示。

我想知道是否有办法连接变量名?例如,不是使用 var name 和使用 switch 语句来为变量名赋值,有没有办法做类似的事情:

file + i // this will be the var file0, file1, file2.


var name = null,
    content = null;

var file0 = {
    name: null;
    },
// file2, file3, file4.
    file5 = {
    name: null;
    };


//  Something's length is < 10.
for(var i = 0, len = something.length; i < len; i++){
    switch(i){
        case 0:
            name = file0.name;
            break;
        case 1:
            name = file1.name;
            break;
        case 2:
            name = file2.name;
            break;
        case 3:
            name = file3.name;
            break;
        case 4:
            name = file4.name;
            break;
        case 5:
            name = file5.name;
            break;
        default:
            break;
    }

    //  Better way to write name below?
    $("#someContainer").append('<li class="file" id="file' + i + '">' + name + '</li');
}

【问题讨论】:

  • 使用文件数组,而不是带数字的变量。
  • 你可以这样做var f = "file" + 0 + ".txt";

标签: javascript variables for-loop switch-statement


【解决方案1】:

您可以按名称访问变量:

var file4 = 42;
this["file"+4]++;
alert(file4) // 43

不确定使用 this 还是 window 访问全局变量是否更合适。

【讨论】:

  • 这就是我要找的。你能解释一下 window[] 在这里做什么吗?谢谢。
  • window 是变量所在的对象。也许 this 会更合适,我会更正它。
  • 看起来使用 window 会污染全局范围,当您在 jquery 或其他函数中调用它时,这可能会很混乱。有没有另一种方法可以做到这一点?谢谢。
【解决方案2】:

我不明白你为什么要创建这样一堆对象,每个对象只包含一个键值对。 为什么不使用数组作为文件名?

var arrFileNames = ["file0Name","file1Name","file2Name"...];
for(...) {
    name = arrFileNames[i];
}

或者,为了缩短内容(因为实际上不需要名称变量):

$("#someContainer").append('<li class="file" id="file' + i + '">' + arrFileNames[i] + '</li');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2020-07-06
    相关资源
    最近更新 更多