2

編集:Matt Bryantの答えを読むと、うまくいくはずですが、彼は indexOf() メソッドを使用しており、そのメソッドはIE 8以降では動作せず、IE 8で動作する必要があります。これを試してみましたindexOf() メソッドの回避策としてですが、機能していません。

var tester = -1;
for (var test=0; test<xposition.length; test++) {
    if (x == xposition[0]) {
        tseter = x;
    }
}

なぜそれが機能しないのですか?

元の質問:したがって、ランダムな数値のペアを生成したいのですが、数値のペアがまだ生成されていない場合に限ります。これが私が試したことです。うまくいけば、私が試したことを読んでいただければ、私が必要としているものが正確に何であるかを理解していただけると思います。

function randomPairs() {
    var xposition = []; //array which holds all x coordinates
    var yposition = []; //array which holds all y coordinates
    for (var i=0; i<5; i++) { //do everything below 5 times (generate 5 pairs)

        var x = getRandom(1,7); //generate new x point
        var y = getRandom(2,7); //generate new y point

        if ( jQuery.inArray(x, xposition) ) { //if newly generated x point is already in the xposition array (if it was already previously generated
             var location = xposition.indexOf(x) //find the index of the existing x

             if (y == yposition[location]) { //if the newly generated y points equals the same y point in the same location as x, except in the yposition array

                 while ( y == yposition[location]) {
                     y = getRandom(2, 7); //change y
                 }
             }
       }
  }
  xposition.push(x); //put x into the array
  yposition.push(y); //put y into the array
}

それで、なぜそれが機能しないのか考えていますか?jQuery.inArray() と .indexOf() メソッドを適切に使用していますか?

ああ、getRandom は

function getRandom(min, max) {
    return min + Math.floor(Math.random() * (max - min + 1));
}

基本的に、最小値と最大値の間の数値を生成します。

また、私がやろうとしたとき

alert(xposition);
alert(yposition);

空白です。

4

2 に答える 2

0

このアプローチの主な問題の 1 つは、同じ x または y 値を持つ一意のペアが複数ある場合を考えなければならないことです。

x = [1, 1, 1], y = [1, 2, 3]

Array.indexOf は、指定された要素が配列内にある場合にのみ最初のインデックスを返すことに注意してください。したがって、一致を見つけたインデックスから再帰的に実行する必要があります。

整数の一意のペアを生成する単純なアプローチは、jquery なしで実行できます: http://jsfiddle.net/WaFqv/

順序が重要であると仮定しているため、x = 4, y = 3 & x = 3, y = 4は 2 つの一意のペアと見なされます。

于 2013-10-16T17:58:35.567 に答える