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

まず、HTMLドキュメントのvar input [i] .value(後でelev [i])に22個のインポートがあります。すべての「elev」配列を1回使用したいのですが、(ここで切り取ったdocument.writeで)それらの一部を2回使用し、一部は使用されていないことがわかります。どうすれば修正できますか?

フィッシャー-イェーツシャッフルを使用して解決された問題

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;

使用しようとすると、常にfalseがstr.SomeProp返されundefined ます( 、、空の文字列、、およびJavaScriptの演算子ではfalseとして動作するため)。したがって、コードをリファクタリングすることをお勧めします。if (elev[r].used)0falsenullundefinedif

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と評価され、最初のアラートが機能しない等式演算子を使用します。しかし、問題もあります。文体的なもの。特にJavaScriptでは、falseの値をチェックしないでください。

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

正しいスニペットは次のようになっている必要があります。

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

PS

aaどこからでも変数を取得します。それはどこから来たのですか?未定義である必要があります。何が欲しかった?2つの数値の連結値?それらの合計?

編集:

ほんの少しの通知。

1)for (var a = 0; a < someConstant; a++)構文を使用します。varキーワードを追加することを忘れないでください。

2)適切なインデントを使用します。

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

empty3) elseブロックは使用しないでください。

于 2013-01-22T17:40:24.877 に答える