-1

72 エントリの json ファイルから 6 つの結果をランダム化する JavaScript 関数を作成し、それらをクラスに返そうとしています。ただし、返される結果は 1 つだけです。誰かがクラスに文字列を返すのを手伝ってくれるかどうか疑問に思っていましたか? または、結果を次々に表示します。

ここに私のjavascriptがあります

<script>
function getitems() {
    var arr = [];
        for (var i = 0, l = 6; i < l; i++) {
            arr.push(Math.floor((Math.random()*72)+1))
        }
    $.getJSON('items.json',function(data) {
        for ( var i = 0; i < 6; i++ ) {
            var items = data.result.items[arr[i]].item.toString();
            $('.item-name').html(items);
        }
    }).error(function(){
    });
}
    $('#refreshItem').click(function() { 
    getitems();

});
</script>
4

2 に答える 2

0

このコード ブロックは、次の行を使用して、同じ HTML 要素のセットにアイテムを次から次へと詰め込んでいます$('.item-name').html(items);

    for ( var i = 0; i < 6; i++ ) {
        var items = data.result.items[arr[i]].item.toString();
        $('.item-name').html(items);
    }

arr[5]したがって、すべての$('.item-name')要素 でのみ終了します。

結果がどうなりたいかは正確には不明です。あなたが達成しようとしていることをさらに説明してください。


class="item-name"返されたすべての結果から 6 つのランダムな結果を選択し、それらを既に存在する6 つのアイテムのそれぞれに配置しようとしている場合は、次のようにします。

function getitems() {
    var arr = [];
    for (var i = 0; i < 6; i++) {
        arr.push(Math.floor((Math.random()*72)+1));
    }
    $.getJSON('items.json',function(data) {
        var items = $('.item-name');
        for ( var i = 0; i < 6; i++ ) {
            var result = data.result.items[arr[i]].item.toString();
            items.eq(i).html(result);
        }
    }).error(function(){
    });
}

これは、6 つのランダムな結果のそれぞれが異なることを保証するものではないことに注意してください。同じ結果が繰り返される可能性があります。data.result.items はゼロベースの配列であると想定しているため、ランダムな結果に追加1する理由もわかり0ません。インデックスも含める必要があります。


各ランダム結果が一意であることも確認したい場合は、次のようにすることができます。

function getitems() {
    var arr = [], used = {}, val;
    for (var i = 0; i < 6; i++) {
        do {
            val = Math.floor((Math.random()*72)+1);
        } while (!(val in used));
        used[val] = true;
        arr.push(val);
    }
    $.getJSON('items.json',function(data) {
        var items = $('.item-name');
        for ( var i = 0; i < 6; i++ ) {
            var result = data.result.items[arr[i]].item.toString();
            items.eq(i).html(result);
        }
    }).error(function(){
    });
}
于 2013-10-29T21:25:45.097 に答える