2016-10-03 12 views
1

私はランダムに別のページにリダイレクトするために使用されるようになっている機能を持っている:私はこれを数回テストしてみた1〜3の物事が起こるように見える、それはどちらかのいずれかにリダイレクトしますこの機能には2つ以上の結果がありますか?

function() { 
     var rand_exp = ['v', 'a']; 
     var pick_exp = function(expType) { 
        return expType[Math.floor(Math.random()*expType.length)]; 
       } 
     if (pick_exp(rand_exp) === 'v') { 
      window.location.replace("experiment_v.html"); 
     } else if (pick_exp(rand_exp) === 'a') { 
      window.location.replace("experiment_a.html"); 
     } 
    } 

をif文とelse if文の2つの節、または上記のjavascriptが埋め込まれているページにリダイレクトされます。その場合は空白の画面が表示されますが、これは期待されますか?

+0

あなたは2つだけの選択肢を得るbeauseあなたは、pick'(あればそうでない} 'かの秒を省略することができます –

答えて

1

のいずれかになりますの上に、2よりも小さくなります上記の私のコメントを適切な答えに変えてください。その答えの短いバージョンははいです。可能な結果は2つ以上あります。

長いバージョン

あなたの機能pick_expは正しくそれが入力配列の要素を選択するように実装されます。問題は、それを複数回呼び出すことで、配列の要素が結果に均等に表現されることを期待していることです。

最初の条件では、pick_expを初めて呼び出します。その結果は 'a'または 'v'となる可能性があり、結果は真または偽であり、それぞれの場合に50%の確率で表示されます。それが偽であった場合は、それを再度呼び出すと、の新しいの値が選択されます。これは等しい確率で独立した 'a'または 'v'、または最後に呼び出したときの結果です。 2番目の式がfalseになる確率は%です。つまり、リダイレクトが発生していない関数から戻ることを意味します。実際にリダイレクトする機会は、全体で約50%です。

固定コードは次のようになります。

function() { 
    var rand_exp = ['v', 'a']; 
    var pick_exp = function (expType) { 
     expType[Math.floor(Math.random()*expType.length)]; 
    }; 

    var result = pick_exp(rand_exp); 

    if (result === 'v') { 
     window.location.replace("experiment_v.html"); 
    } else if (result === 'a') { 
     window.location.replace("experiment_a.html"); 
    } 
} 

をあなたが機能せずにそれを行うと、このような何かを得ることができます:

function() { 
    var rand_exp = ['v', 'a']; 
    var pick_exp = rand_exp[Math.floor(Math.random()*rand_exp.length)]; 

    if (pick_exp === 'v') { 
     window.location.replace("experiment_v.html"); 
    } else if (pick_exp === 'a') { 
     window.location.replace("experiment_a.html"); 
    } 
} 

ちょうど二つの可能なパスで上記のコードの結果:'v' -> experiment_v.htmlおよびa -> experiment_a.html

また、あなたは結果を直接使用することができます。

function() { 
    var rand_exp = ['v', 'a']; 

    window.location.replace("experiment_" + rand_exp[Math.floor(Math.random()*rand_exp.length)] + ".html"); 
} 
0

この機能には2つ以上の結果がありますか?

いいえ、ユニバーサルセットは['v', 'a']に制限されています。

そしてexpType.lengthは、0と1(1未満)との間の分数値を返すMath.random

あるので、このライン

return expType[Math.floor(Math.random()*expType.length)]; 

のみ、 'V' または 'A' を返します。あなたは2(expType.length)とその値を掛けるとき

は、出力は常に私がしたい考え出しあなたがMath.floorを行う場合は、出力が0または1

+0

任意のアイデアそれは時々失敗する理由としてリダイレクトするには – UberStuper

+0

リダイレクトに失敗したことを示すフィドルを共有することは可能ですか? – gurvinder372

+0

私はライブラリhttp://www.jspsych.org/を使用していますので、フィドルのすべての機能を模倣する方法はわかりませんが、私は 'if exp'と' else if'文を 'var exp = pick_exp(rand_exp); window.location.replace(' experimental _ $ {exp} .html')に置き換えました。 。 – UberStuper

関連する問題