2016-11-18 111 views
1

我在寻找咨询这是否又是为了什么我试着去实现最佳的数据结构,如果是这样,我怎么会创建一个随机选择一首歌曲的功能。从Javascript嵌套数组/数据结构选择随机项目

var song = { 

    john: [ "Come Together", "Revolution" ], 
    paul: [ "Hey Jude", "Blackbird" ], 
    george: [ "Something", "Here Comes the Sun" ], 
    ringo: [ "Yellow Submarine", "With a Little Help from my Friends" ] 
}; 

下面是它是如何工作的:当用户点击开始

  • 一首歌曲(随机拾取)

    1. 定时器开始时,屏幕上显示
    2. 然后用户点击四个图标之一/名称(约翰,保罗,乔治和林戈)
    3. 答案已被记录(正确或不正确)。
    4. 另一首歌曲是随机选取的,直到定时器结束。

    我不想解决这个问题,我只是想知道,如果我使用的最好的数据结构......如果我(或者如果我不是!),怎么我会去制作随机歌曲。我对此很陌生,我想要做的事情比我之前尝试过的任何事情都要复杂得多。最后一点...约翰和保罗的个人阵列将是非常该死的长的歌曲列表完成时...

    谢谢!

  • +0

    我认为这是一个更好的问题[softwareengineering.stackexchange.com(http://softwareengineering.stackexchange.com/) –

    +3

    我想使用的有两个属性歌曲的数组:标题和作者会它更容易为你的目的。 – nicovank

    +0

    你每个艺术家总是有两首歌吗?你是否希望在选择任何歌曲或者选择任何艺术家(在艺术家拥有不同数量的歌曲的情况下)(然后是来自该艺术家的随机歌曲)的概率相同的情况下?从测试的角度来看,不管每位艺术家的歌曲数量是多少,选择每位艺术家的概率应该是相等的。如果情况并非如此,那么猜测基于歌曲最多的艺术家可以成为一种可行的测试策略。 – Makyen

    回答

    1

    我会推荐使用关系结构。

    var artists = ['john', 'paul', 'george', 'ringo']; 
    var songs = [ 
        { name: "Come Together", artist: 0 }, 
        { name: "Revolution", artist: 0 }, 
        { name: "Hey Jude", artist: 1 }, 
        { name: "Blackbird", artist: 1 }, 
        { name: "Something", artist: 2 } 
    ]; 
    
    1. 这可以让你更多的属性,如果你需要添加的艺术家(如图片,维基百科的链接,等等)。
    2. 它可以让歌手快速查找艺术家。您目前的设置将需要很高的成本才能找到歌手。
    3. 这是比较容易随机,均匀,选择一个随机播放歌曲。您目前的设置会使得难以随机均匀地选择歌曲。
    +0

    谢谢乔。我其实是一个公平的测试方式,但这似乎是有道理的。 – Doughballs

    1

    我会用歌曲的数组,每个都有一个作者:

    然后,您可以使用filter()找到所有与给定作者的歌曲:

    var songs = [{ 
     
        author: 'john', 
     
        title: 'Come Together' 
     
    }, { 
     
        author: 'paul', 
     
        title: 'Hey Jude' 
     
    }, ]; 
     
    
     
    
     
    var johnsSongs = songs.filter(function(song) { 
     
        return song.author === 'john'; 
     
    }); 
     
           
     
    console.log(johnsSongs);

    +0

    谢谢Sumner。我认为这个解决方案的问题在于,如果我的歌曲列表达到100个,那么我必须为每首歌曲编写这些作者:标题对。 – Doughballs