2017-03-01 6 views
0

私は$.each()をリファクタリングしようとしているので、この手順を繰り返して別のカテゴリのJSONを取得する必要はありません。オブジェクトを通過するときにjQueryで.each()を繰り返さないようにする

JSON--

var data = { 
"categories": { 
    "cat1": [ 
     { 
      "id": "1", 
      "code": "6001", 
      "name": "Item 1", 
      "size": "M"; 
     } 
    ], 
    "cat2": [ 
     { 
      "id": "232", 
      "code": "60021", 
      "name": "Item 31", 
      "size": ""; 
     } 
    ] 
} 

}

私は、私は以下の例を参照の二つの別々のコードを維持するために持っているようにちょっと迷惑である各カテゴリの$.each()をやっている瞬間。その後、私は2つが、それぞれのdiv同上

$.each(data.categories.cat1, function(index, value) { 
    var itemHtml = '<div>value.name</div>' // sample only 
    $('#cat1').append(itemHtml); 
}); 

$.each(data.categories.cat2, function(index, value) { 
    var itemHtml = '<div>value.name</div>' // sample only 
    $('#cat2').append(itemHtml); 
}); 

で各カテゴリを追加だから私はこのような何かをやってする仕事だろうと思っているが、明確にはしませんでした。

$.each(data, function(index, value) { 
var itemHtml = '...'; 
if(data.cat1) { 
    $('#cat1').append(itemHtml); 
} else if(data.cat2) { 
    $('#cat2').append(itemHtml); 
} 
} 

彼らはとにかく同じHTMLのレイアウトを持つことになりますよう$.each()毎回繰り返すことなくこれを行うための良い方法はあります。

+0

各繰り返し処理を...あなたは反復処理することはできません同時に複数のオブジェクトを使用する –

+1

あなたが持っているものはJSONではなく、たとえそうであっても有効ではありません。あなたのデータは実際に '{cat1:[...]、cat2:[...]}'のように見えるかもしれませんね? –

+0

申し訳ありませんが、私は正しいオブジェクトを入れました。 – MrNew

答えて

2

$.eachを使用すると、オブジェクトや配列を反復処理できます。オブジェクトを反復処理すると、プロパティ名とプロパティ値がコールバックに渡されます。あなたがしたい、あなたのデータが実際に{cat1: [...], cat2: [...]}であると仮定すると:

$.each(data.categories, function(category, items) { 
    // `category` is either "cat1" or "cat2" 
    // `items` is an array 

    var $element = $('#' + category); 

    $.each(items, function(index, value) { 
    var itemHtml = '<div>Layout</div>' // sample only 
    $element.append(itemHtml); 
    }); 

}); 

は、あなたの実際の使用ケースに応じて、HTMLを生成し、追加のためのより良い方法は、潜在的にあります。

+0

Nvmの私のIDが間違っています – MrNew

+0

私のためにうまく動作します:https://jsfiddle.net/s8x493r3/。 –

+1

私の最後のコメントを編集:) – MrNew

0

あなたはあなたがプロパティに繰り返すことができ、かなり簡単な方法でそれを行うには

Object.keys(data.categories).forEach(function(cat) { 
    var itemHtml = '<div>Layout</div>' 
    $('#' + cat).append(itemHtml) 
}) 
+0

これは '$ .each()'とどう違うのですか?しかし、データ 'value.x'を得るために' $ .each(data.categories [cat]) 'を実行する必要がありますか? – MrNew

+0

私はあなたの2つのコードスニペットを外していました。私の例はずっと簡単です。あなたの質問にはどこにも 'value.x'について何も指定していないので、あなたの質問を少しはっきりさせたいかもしれません。 –

+0

ええ、申し訳ありません、私は 'itemHtml' varに追加したと思っていました。私は今それを追加しました。 – MrNew

1

Object.keysforEachを使用することができます:オブジェクトを介して

$.each(data.categories, function(index, value) { 
    console.log(index); // current category 
    $.each(value, function(indexSub, valueSub) { 
     console.log(indexSub); 
     console.log(valueSub.id); 
     console.log(valueSub.code); 
     console.log(valueSub.name); 
    }); 
}); 
関連する問題