javascript帮助 - 程序不提醒

时间:2013-01-22 17:19:32

标签: javascript loops alert

我还在制作一个程序而且我遇到了问题。代码在这里:

function Calculate(){
    var elev = [];
    var inputs = document.getElementsByName("txt");
    for(i=0; i<inputs.length; i++) {
    elev[i] = {
        "Value": inputs[i].value,
        "Used": false
    };
}

    for(j=0; j<=10; j++) {
            var r = Math.floor(Math.random() * 20);

            if (elev[r].Used) {             //1st number
                for(var a=0; a<=21; a++) {
                    if (!elev[a].Used) {
                        elev[r].Value = elev[a].Value;
                        break;
                        }
                    else {continue; }
                    }
                }
                ...
                }
            }


            elev[r].used = true;
            doument.write(elev[r].Value);
            ...
        }
}

首先,我在HTML文档中对var输入[i] .value(稍后的elev [i])进行了22次导入。我想让它使用所有'elev'数组一次,但我看到(在我的document.write中,因为我在这里修剪)它使用了一些两次,其中一些甚至没有使用。我该如何解决这个问题?

使用Fisher-Yates shuffle解决问题

1 个答案:

答案 0 :(得分:0)

让我指出你的剧本的几个问题

首先是本节

for(i=0; i<inputs.length; i++) {
   elev[i] = inputs[i].value;
   elev[i].used = false;
}

您正在为数组指定值,但它的类型为String。 String没有获取属性。

以下代码可以使用

var obj = {};
obj.SomeProp = true;

但如果你这样做

var str = "";
str.SomeProp = true;

尝试使用str.SomeProp将始终返回undefined 代码if (elev[r].used)将始终评估为false(因为0,空字符串,falsenullundefinedif中表现为false JavaScript中的运算符) 所以我建议你将代码重构为

for(i=0; i<inputs.length; i++) {
    elev[i] = {
        "Value": inputs[i].value,
        "Used": false
    }; // Pay attention, I added an object and Used property starts with an uppercase letter.
    // Then further in the code you'll use elev[index].Value in order to use the value
}

最后,块if (elev[aa].used = false)不会抛出异常,但这是一个错误。

考虑以下剪切

var someVal = true;
if (someVal = false)
    alert("That's wierd");
alert(someVal);

它将起作用,因为您将值false赋给someVal变量,并且此指令被评估为true。系统会显示一些包含消息That's wierd的提醒。此外,您会注意到someVal的值为false。 此snipped使用等于运算符,该运算符将被计算为false,并且第一个警报将无效。但是也存在问题。一种风格的。切勿将值检查为false,尤其是在JavaScript中。

var someVal = true;
if (someVal == false)
    alert("That's wierd");
alert(someVal);

正确的代码段必须如下所示。

var someVal = true;
if (someVal)
    alert("There you go!");
alert(someVal);

P.S。

您无处可获得变量aa。它从何而来?它必须是未定义的。你想要什么? 两个数字的共同值?他们的总和?

修改

只是一些通知。

1)使用for (var a = 0; a < someConstant; a++)语法。不要忘记添加var关键字。

2)使用适当的缩进,即

if (someCondition){
    // Some instruction
    for (var i = 0; i < 10; i++) {
        //more indention
    }
}

3)不要使用empty else阻止。