0

我仍在开发一个程序,但我遇到了问题。代码在这里:

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);
            ...
        }
}

首先,我有 22 次导入到我的 HTML 文档中的 var inputs[i].value(后来的 elev[i])。我希望它一次使用所有的“elev”数组,但我看到(在我的 document.write 中,我在这里剪掉了)它使用了其中一些两次,其中一些甚至没有使用。我该如何解决?

使用 Fisher-Yates shuffle 解决的问题

4

1 回答 1

0

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

首先这个部分

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

您正在将值分配给数组,但它的类型是String。字符串不获取属性。

以下代码将起作用

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

但如果你这样做

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

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

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. 此片段使用将被评估为 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);

附言

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) 不要使用emptyelse 块。

于 2013-01-22T17:40:24.877 回答