Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从Javascript嵌套数组/数据结构中选择随机项_Javascript_Arrays_Random_Nested - Fatal编程技术网

从Javascript嵌套数组/数据结构中选择随机项

从Javascript嵌套数组/数据结构中选择随机项,javascript,arrays,random,nested,Javascript,Arrays,Random,Nested,我正在寻找关于这是否是我试图实现的最佳数据结构的建议,如果是,我将如何创建一个随机选择歌曲的函数 var song = { john: [ "Come Together", "Revolution" ], paul: [ "Hey Jude", "Blackbird" ], george: [ "Something", "Here Comes the Sun" ], ringo: [ "Yellow Submarine", "With a Little Help

我正在寻找关于这是否是我试图实现的最佳数据结构的建议,如果是,我将如何创建一个随机选择歌曲的函数

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" ]
};
以下是它的工作原理:

  • 当用户单击开始时,计时器开始
  • 屏幕上会显示一首歌曲(随机挑选)
  • 然后用户单击四个图标/名称中的一个(约翰、保罗、乔治或林戈)
  • 已记录答案(正确或不正确)
  • 随机挑选另一首歌曲,直到计时器结束
  • 我不想要这个问题的解决方案,我只想知道我是否使用了最好的数据结构……如果是(或者不是!),我将如何生成一首随机歌曲。我是新手,我尝试做的事情比我以前尝试过的任何事情都要复杂。最后一点…当歌曲列表完成后,约翰和保罗的个人阵列将会非常长


    谢谢

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

    然后,您可以使用以下方法查找指定作者的所有歌曲:

    var-songs=[{
    作者:《约翰》,
    标题:“走到一起”
    }, {
    作者:《保罗》,
    标题:“嘿,裘德”
    }, ];
    var johnsSongs=songs.filter(函数(歌曲){
    返回歌曲。作者==='john';
    });
    
    console.log(johnsSongs)我建议使用关系结构

    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 }
    ];
    
  • 这允许您在需要时向艺术家添加更多属性(如图片、维基百科链接等)
  • 它允许更快地查找给定歌曲的艺术家。您当前的设置需要花费大量成本才能找到给定歌曲的艺术家
  • 随机、一致地挑选一首随机歌曲更容易。您当前的设置将使随机和统一挑选歌曲变得困难

  • 我认为这是一个更好的问题,因为我认为使用一系列具有两个属性的歌曲:标题和作者会使你的目的更容易。你总是每个艺术家有两首歌曲吗?你是否希望有一个相同的概率,任何歌曲被选中,或任何艺术家被选中(在艺术家有不同数量的歌曲的情况下)(然后是来自该艺术家的随机歌曲)?从测试的角度来看,无论每个艺术家有多少首歌,选择每个艺术家的概率应该是相等的。如果不是这样的话,那么根据歌曲最多的一首来猜测歌手就可以成为一种可行的应试策略。我打算把披头士乐队的完整目录放回数组中,这样就有数百首歌曲了(游戏将跟踪谁是主唱,而不是歌曲的作者)。约翰和保罗将占绝大多数,因此林戈和乔治的阵列相比将相当短。我确实考虑过让author:title作为key:value,但我一直在考虑,并试图让代码尽可能短-如果john有200首歌,我就必须为每首歌写出那些key:value对-按照我上面编写数组的方式,每个歌手只写一次。@Sumneevans在引用其他网站时,感谢萨姆纳这一点通常是有帮助的。我认为这个解决方案的问题是,如果我的歌曲列表达到100首,那么我必须为每首歌曲编写作者:标题对。谢谢Joe。我实际上是一个公平的测试方法,但这似乎是有意义的。