0

変更されないハードコードされた名前の配列があります。また、値は 2 つしかありません。

配列をループしてランダムに値を選択する必要がありますが、同じ値を 2 回返すことはありません。

私の現在のコードは次のとおりです。

var pick_url = new Array('url_1', 'url_2');
var picked_url_to_use = pick_url[Math.floor(Math.random() * pick_url.length)];
var base_url = picked_url_to_use;

console.log(base_url);

これは正常に機能していますが、同じ値が複数回返されることがあります。

誰でもこれを解決するのを手伝ってもらえますか?

4

3 に答える 3

1
var pick_url = ['url_1', 'url_2'];
var base_url = picked_url = pick_url.splice(Math.floor(Math.random() * pick_url.length), 1).join();

編集: 常に url_1 を返し、次に url_2 を返すか、またはランダムな URL を返し、次に他の URL を返すかがわかりません。

以下は、ランダムな URL を返し、その後の呼び出しで次の URL を返す必要があります。

function rurl() { var picked_url = pick_url.splice(Math.max(0, Math.floor(Math.random() * pick_url.length)), 1).join(); return picked_url; }

常に url_1 を返し、次に url_2 を返すようにしたい場合は、Math.max を Math.min に変更するか、pick_url.splice(0, 1).join(); を実行してください。

于 2013-03-08T11:56:38.607 に答える
1

返された値を知りたい場合は、次の 2 つの一般的なオプションから選択できます。

返された項目をpick_url配列から削除できるため、返されなくなります。spliceこれについては、javascriptの機能を調べてください: http://www.w3schools.com/jsref/jsref_splice.asp

別の配列で既に返されたものを追跡することもできます。次に、2 番目の URL を取得したら、それが以前に送信されたかどうかを確認します。ある場合は、新しいランダム アイテムを選択し、再チェックします。理論的には、ランダムに使用済みのアイテムを選び続けると、これには時間がかかる可能性があります。

最初のオプションを選択します。これは、より高速で、繰り返す必要がないためです。

于 2013-03-08T11:22:23.887 に答える
0

配列に常に正確に 2 つの値がある場合:

var pick_url = new Array('url_1', 'url_2');
var random_index1 = Math.floor( Math.random() * 2 );
var random_index2 = Math.abs( random_index1 - 1 );

console.log( pick_url[ random_index1 ] );  // either url_1 or url_2
console.log( pick_url[ random_index2 ] );  // always the other url

デモ: http://jsfiddle.net/jGurr/

于 2013-03-08T11:25:31.897 に答える