2013-03-26 126 views
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 - 我:對象對象] - undefined

我不知道如何讓「我」工作,它總是給我[對象對象]。我用數組中的實際ID替換I,它起作用。

謝謝。

+0

這些數組很奇怪。每個人只有一個項目 – tjb1982 2013-03-26 01:50:59

+1

這是不完全清楚你在這裏試圖完成。你能更具體地預期產出嗎? – Tharsan 2013-03-26 01:55:54

+0

@Tharsan,我只是試圖去顯示歌曲對象中的所有東西。 – 2013-03-26 02:20:42

回答

10

如果你想使用$.each你可以試試這個: -

$.each(myArray.songs, function (i, ob) { 
    $.each(ob, function (ind, obj) { 
     console.log("key:" + ind + " value:" + obj); 
    }); 
}); 
+0

這完全工作!謝謝大家的意見,我只是在學習JSON,所以我很抱歉,如果這讓大家感到困惑,或者它沒有正確使用。我沒有被拋出一個錯誤,所以我認爲它很好。 – 2013-03-26 02:16:44

0

你的結構有點奇怪 - 歌曲是一個包含你的鍵值對的單個json元素的數組。儘管如此,遍歷這些元素,你應該做的:

var songsElement = myArray.songs[0]; 
    for (var key in songsElement) { 
     if (songsElement.hasOwnProperty(key)) { 
      console.log(key + " -> " + songsElement[key]); 
     } 
    } 
+0

謝謝你的幫助! – 2013-03-26 02:20:10

1

如果您是通過所有的歌曲試圖循環,myArray.songs是與它一個對象的數組。

試試這個:

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

並檢查了這個的jsfiddle http://jsfiddle.net/TsJP5/1/

+0

這也適用於我!你們對你們的幫助超級棒! – 2013-03-26 02:18:37

0

除非你需要遍歷jQuery的元素的集合,我不會用$。每()(這是個人喜好) 。相反,利用陣列上的原生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); 
      } 
     }); 
    } 
} 

這將同時處理Array和Object實例以及遞歸。你拿slight performance hit by always using Object.keys()來獲得成員名字,但我認爲它甚至在非常大的數據集上也是微不足道的。

+0

謝謝你的幫助! – 2013-03-26 02:19:21

+0

並非所有瀏覽器都支持.forEach,因此您可能需要修改數組原型以便像這樣使用它:'if(!('forEach'in Array.prototype))Array.prototype.forEach = function(){.. 。};'請參閱http://stackoverflow.com/questions/8348569/array-prototype-foreach-alternative-implementation-parameters獲取實現細節 – tjb1982 2013-03-26 02:45:27

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.");