3

まず、正しいタイプの配列を特定できなかった場合はご容赦ください。しかし、これを理解できないようです。

この配列をクエリで実行しようとしています:

var myArray = {"artists":[{
            "a1":"Adam Sandler",
            "a2":"Adam Lambert",
            "a3":"Avril Levine",
            "a4":"Backstreet Boys",
            "a5":"Blackstreet",
            "a6":"Black Eye Peas",
            "a7":"Cool and the Gang",
            "a8":"Chicago",
            "a9":"Charlie Manson"

        }],
        "songs":[{
            "s1":"Grow Old With You",
            "s2":"Whatdaya Want From Me",
            "s3":"Yea yea",
            "s4":"Quit Playing Games With My Heart",
            "s5":"No Digity",
            "s6":"Meet Me Half way",
            "s7":"Doo wa ditty",
            "s8":"Fight for your honor",
            "s9":"Charlies Song"
        }],
        "genre":[{
            "g1":"Pop",
            "g2":"Pop",
            "g3":"Alternative",
            "g4":"R & B",
            "g5":"R & B",
            "g6":"Hip-Hop",
            "g7":"Funk",
            "g8":"Soft Rock",
            "g9":"Rock"
        }]};

ボタンをクリックすると(タイトルなど)、自動的に配列を通過する方法がわかりません。これは私が私のボタンのために持っているものです:

                $.each(myArray.songs, function(e,i){
                    console.log("e:"+e+" - i:"+i+" - "+myArray.songs[e].i);

                });

これは機能しますが、console.logに到達すると、次のようになります。

e:0-i:[オブジェクトオブジェクト]-未定義

「i」を機能させる方法がわかりません。常に[オブジェクトオブジェクト]が表示されます。Iを配列内の実際のIDに置き換えれば、機能します。

ありがとうございました。

4

5 に答える 5

14

使用したい場合は、$.eachこれを試すことができます:-

$.each(myArray.songs, function (i, ob) {
    $.each(ob, function (ind, obj) {
        console.log("key:" + ind + " value:" + obj);
    });
});
于 2013-03-26T02:04:04.137 に答える
1

すべての曲をループしようとしている場合myArray.songsは、1つのオブジェクトを含む配列です。

これを試して:

$.each(myArray.songs[0], function(e, i) {
  console.log('e:' + e + ' - i:' + i);
});

そして、このjsFiddlehttp : //jsfiddle.net/TsJP5/1/をチェックしてください。

于 2013-03-26T01:59:20.260 に答える
0

あなたの構造は少し奇妙です-曲はあなたのキーを含む単一のjson要素を持つ配列です-値のペアリング。それでも、これらの要素をループするには、次のことを行う必要があります。

    var songsElement = myArray.songs[0];
    for (var key in songsElement) {
        if (songsElement.hasOwnProperty(key)) {
            console.log(key + " -> " + songsElement[key]);
        }
     }
于 2013-03-26T01:58:25.450 に答える
0

jQuery要素のコレクションを繰り返す必要がない限り、$。each()は使用しません(これは個人的な好みです)。むしろ、配列のネイティブforEach()メソッドを利用します。

function each(obj, onSuccess, recursive) {
    if (obj && (typeof obj === 'object' || typeof obj === 'array')) {
        Object.keys(obj).forEach(function(key) {
            var val = obj[key];
            if (onSuccess && val && key) {
                var quit = onSuccess(val, key);
                if (false === quit) {
                    return false;
                }
            }
            if (true === recursive) {
                each(val, onSuccess, true);
            }
        });
    }
}

これは、配列インスタンスとオブジェクトインスタンスの両方、および再帰を処理します。常にObject.keys()を使用してメンバー名を取得すると、パフォーマンスがわずかに低下しますが、非常に大きなデータセットでも最終的には無視できると思います。

于 2013-03-26T02:09:54.573 に答える
0

あなたのデータが何を意味するのか完全にはわかりませんが、それは一緒になっている曲/アーティスト/ジャンルのグループの束のように見えます。例えば、

[{"song":"Losing My Religion",
  "artist":"R.E.M.",
  "genre":"alternative"},
 {"song":"Bizarre Love Triangle",
  "artist":"New Order",
  "genre":"electronica"}]

なぜs1、a1、g1が役立つのかわからないので、省略します。そして、正直なところ、これにjqueryを使用することは役に立たないと思います。代わりにこれを行います:

for (var i = 0; i < myArray.length; i++)
  console.log(myArray[i].song + " by " + myArray[i].artist + " is of the " + myArray[i].genre + " ilk.");
于 2013-03-26T02:38:20.630 に答える