2016-12-13 10 views
0

各ループを使用してJSONデータベースから取得しています。現在、このループはJSONをランダム化し、DIV内のランダムな項目を出力します。私がこれにどのように追加して、それがすべてではなくカテゴリからランダムな項目を選択するかを理解しようとしています。カテゴリごとにランダムな項目をソートする方法を理解しようとしています。JSON

以下

は私のコードです:

function similarProduct() { 
    $.each(json, function(i,item){ 
     similarProduct = json[Math.floor(Math.random()*json.length)]; 
     similarProduct += '<div>' + '<img src="' + similarProduct.imageURL + '">' + '<h3>' + similarProduct.itemName + '</h3>' + '</div>'; 
    }); 

    $('#productSimilar').append(similarProduct);    
} 

マイJSON形式は、次のようになります。

[ 
    { 
    "itemName":"Organic Tomatoes", 
    "imageURL":"", 
    "itemCategory":"Tomatoes" 
    }, 
    { 
    "itemName":"Olive Oils", 
    "imageURL":"", 
    "itemCategory":"Olive Oil" 
    } 
] 
+0

あなたが達成しようとしていることを正確に説明し、最初にコレクションをルーピングする理由を説明してください。また、ローカル変数のように関数を扱っているようです。 –

+1

出力をビルドする前に、JSON配列をソートするだけです。 refrenceについては、[カスタムオブジェクトの配列の並べ替え](http://stackoverflow.com/questions/10723798/sorting-array-of-custom-objects-in-javascript)を参照してください。 – bobjoe

+0

@ChrisPickfordこのコードは、私が作成している製品ページから取得したものです。現在、ページにはアイテムが表示され、下部には同様のレシピdivがあります。すべてのページが動的に作成されるので、私はすべてをループし、各項目のカテゴリから同様の項目を表示しようとしています。 – Tom

答えて

1

あなたが最初のカテゴリからアイテムを一時配列categoryItemsを作成し、ランダムな項目を選択する必要がありますその配列から。

function similarProduct() { 
    var categoryItems = []; 
    $.each(json, function(i, item){ 
     if(item.itemCategory == 'Tomatoes') categoryItems.push(item); 
    }); 

    $.each(json, function(i,item){ 
     similarProduct = categoryItems[Math.floor(Math.random()*categoryItems.length)]; 
     similarProduct += '<div>' + '<img src="' + similarProduct.imageURL + '">' + '<h3>' + similarProduct.itemName + '</h3>' + '</div>'; 
    }); 

    $('#productSimilar').append(similarProduct);    
} 
+0

ジャックこれは私が動作するために必要な正確に動作します。どうもありがとうございます!素晴らしい例! – Tom

+0

これは、元のコード例よりもどのように改善されているのかわかりません。あなたは "トマト"をハードコードしましたが、これは明らかに動的である必要があります。すべての製品データの2つのループを1つのランダムな製品を選択するだけですか? –

+0

@ChrisPickfordそれは動作します。私はエキスパートがいないと言ったように。私は学んでいます – Tom

関連する問題