0

私は現在、いくつかの実験を行うためにjavascriptを使用しています.JSは初めてではありませんが、SOの善良な人々が助けてくれることを願っています.

基本的に、応答の量/長さを返すWebサービスにjsonpリクエストを作成しています(オブジェクトをカウントするだけです)。次に、これらのオブジェクトのうち 9 つをランダムに選択して配列に配置しますが、ここに問題があります。これらの 9 つのオブジェクトが繰り返されないようにしたいと思います。これを達成するために、次のコードを使用しています。

function randomizer() {
    return Math.ceil(Math.random()*badges.length);
}

function dupsVerify(array, number) {
    array.forEach(function () {
        if(array === number) {
            return true;
        }
    });
    return false;
}

// Randomly choose 9 array indexes
var randomBadge = function () {
var selectedIndexes = new Array();

while(selectedIndexes.length < 9) {
    var found = false;
    var randomNumber = randomizer();

    if(!dupsVerify(selectedIndexes, randomNumber)) {
        selectedIndexes.push(randomNumber);
    } else {
        newRandom = randomizer();
        dupsVerify(selectedIndexes, newRandom);
    }
}
return selectedIndexes;
}

この検証を行うためにいくつかの異なる方法を試しましたが、次のことを行うことができないかどうかを考えていました。

乱数を生成し、配列を調べて、配列に既に存在するかどうかを確認します。存在する場合は、別の乱数を生成し (乱数呼び出し)、再度検証します。配列に存在しない場合は、「最終」配列にプッシュします。

どうすればこれを達成できますか?コールバックを使用していますか? 私はこれを正しく行っていますか、それともコードを変更する必要がありますか? これを行う簡単な方法はありますか?

よろしくお願いします、

4

2 に答える 2

0

次のコードを使用して、このシナリオに最適なソリューションを見つけました。

function randomizer() {
    return Math.ceil(Math.random()*badges.length);
}

function dupsVerify(array, number) {
    var result;
    if(array.length === 0) {result = false;}
        array.forEach(function (item) {
            if(item === number) {
                result = true;
            } else {
                result = false;
            }
        });
    return result;
}

// Randomly choose 9 array indexes
function randomBadge() {

    while(cards.length < 9) {
        var randomNumber = randomizer();
        if(!dupsVerify(cards, randomNumber)) {
            cards.push(randomNumber);
        } else {
            randomBadge();
        }
    }
    return cards;
}

これは同じ動作 (およびいくつかの小さなコード修正) を表しますが、2 つのオブジェクトが繰り返される配列を決して取得しないようにします。

于 2013-05-14T09:07:44.937 に答える