web-dev-qa-db-ja.com

オブジェクトのjquery $ .each()

<script>
    $(document).ready(function() {
        var data = { "programs": [ { "name":"zonealarm", "price":"500" }, { "name":"kaspersky", "price":"200" } ] };
        $.each(data.programs[0], function(key,val) {
            alert(key+val);
        });
    });
</script>

このコードは最初のデータを取得します。 name:zonealarmおよびprice:500。オブジェクト内のすべてのデータを取得するにはどうすればよいですか? $.each(data.programs, function(key,val)を試しましたが、うまくいきませんでした。ループに入れるべきですか?

38
matiasdelgado

$.each()は、オブジェクトと配列の両方で機能します。

var data = { "programs": [ { "name":"zonealarm", "price":"500" }, { "name":"kaspersky", "price":"200" } ] };

$.each(data.programs, function (i) {
    $.each(data.programs[i], function (key, val) {
        alert(key + val);
    });
});

...そして、現在の配列要素を2番目の引数として取得するため:

$.each(data.programs, function (i, currProgram) {
    $.each(currProgram, function (key, val) {
        alert(key + val);
    });
});
94
Tomalak

実際、各関数に最初のデータ項目を渡します。

代わりに、data.programsを各関数に渡します。コードを次のように変更します。

<script>     
    $(document).ready(function() {         
        var data = { "programs": [ { "name":"zonealarm", "price":"500" }, { "name":"kaspersky", "price":"200" } ] };         
        $.each(data.programs, function(key,val) {             
            alert(key+val);         
        });     
    }); 
</script> 
8
Chandu

基本的に、ここで2つのループを実行する必要があります。既に実行しているのは、0番目の配列要素の各要素を繰り返すことです。

プログラムがあります:[{...}、{...}]したがって、programs [0]は{"name": "zonealarm"、 "price": "500"}ですので、ループはそれを超えています。

配列に対して外部ループを行うことができます

$.each(data.programs, function(index) {

    // then loop over the object elements
    $.each(data.programs[index], function(key, value) {
        console.log(key + ": " + value);
    }

}
4