Javascript 访问返回组数据的数组中的数组

Javascript 访问返回组数据的数组中的数组,javascript,jquery,arrays,Javascript,Jquery,Arrays,目前我正在循环浏览歌手列表,在歌手数组中有一个对象,名为每个歌手所唱的歌曲。我有for-loop设置,所以我返回所有歌手,但我在循环和返回每个歌手的歌曲时遇到问题 这是我试图返回的演示数据: singers:{ 1{id:1, name: john, songs:[{id:#, name: song1}, {id:#, name:song2}]} 2{id:2, name: jack, songs:[{id:#, name: song1}, {id:#,

目前我正在循环浏览歌手列表,在歌手数组中有一个对象,名为每个歌手所唱的歌曲。我有for-loop设置,所以我返回所有歌手,但我在循环和返回每个歌手的歌曲时遇到问题

这是我试图返回的演示数据:

    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
当您为(singer in singers中的singer)执行
操作时,
singer指的是要枚举的对象中的索引或键,而不是值。你需要做歌手[歌手]。还要执行
var singer
以避免污染全球范围:

for (var i in singers) {
     var singer = singers[i];
     if (singer.hasOwnProperty('songs')) {
         singerData.push(new viewModel(singer));
     }
}
也从你的问题:

在歌手数组中有一个名为songs的对象,每个 歌手演唱

我假设你的意思是你有一个像这样的对象数组

var singers = [
  { songs: ['song name', 'other song'] }
];
试试这个

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

您还有其他代码吗?什么是viewModel?发布你正在迭代的对象我想在singer的循环中循环它,因为返回的结果是在我用于显示的单个对象中。