2015-11-17 77 views
-1

當前我正在循環播放歌手列表,並且在歌手陣列中有一個名爲歌曲的對象,每個歌手都唱歌。我有for循環設置,所以我返回所有歌手,但我無法循環和返回歌曲爲每個歌手。訪問數組中的數組返回組數據

這是什麼,我試圖返回演示數據:

singers:{ 
     1{id:1, name: john, songs:[{id:#, name: song1}, {id:#, name:song2}]} 
     2{id:2, name: jack, songs:[{id:#, name: song1}, {id:#, name: song2}, {id:#, name: song3}]} 
    } 

這就是我,所以我能循環得到歌手的名單,但我想也返回列表歌曲對於每個歌手:

var singer, singerData=[]; 
for (singer in singers) { 
    if (singers.hasOwnProperty(singer)) { 
     singerData.push(new viewModel(singers[singer])); 
        } 
       } 

viewModel = function(singer){ 
    var self; 
     self.singerName = ko.observable(singer.singerName); 
     ..... 
} 

我怎樣才能循環返回的歌曲列表中的每個歌手,這樣我可以顯示數據如下:

John: song1, song2 
Jack: song1, song2, song3 
+0

你有更多的代碼?什麼是視圖模型? –

+0

發佈您正在迭代的對象 –

回答

0

當你這樣做時for(singer in singers)singer指的是你正在枚舉的對象中的索引或鍵,而不是值。你需要做singers[singer]。還做var singer,以避免污染全局範圍:

for (var i in singers) { 
    var singer = singers[i]; 
    if (singer.hasOwnProperty('songs')) { 
     singerData.push(new viewModel(singer)); 
    } 
} 

也從你的問題:

歌手的陣列中有一個歌曲命名的對象,每個 歌手演唱

我假設你的意思是你有這樣的對象數組?

var singers = [ 
    { songs: ['song name', 'other song'] } 
]; 
+0

我想要在歌手的循環內循環此對象,因爲返回的結果位於我用於顯示的單個對象中。 – 072et

0

試試這個

var result = []; 
singers = [{id:1, name: "john", songs:[{id:"#", name: "song1"},{id:"#", name:"song2"}]},{id:2, name: "jack", songs:[{id:"#", name: "song1"}, {id:"#", name: "song2"}, {id:"#", name: "song3"}]}]; 
for(i in singers) { 
    singer = singers[ i ]; 
    var songs = []; 
    for(j in singer.songs) { 
     song = singer.songs[ j ]; 
     songs.push(song.name); 
    } 
    result.push(singer.name + ": " + songs.join(", ")); 
} 
result = result.join("\n"); 
alert(result); 

http://jsfiddle.net/a4a85o8o/