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

时间:2016-11-18 17:16:49

标签: 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 from my Friends" ]
};

以下是它的工作原理:

  1. 当用户点击开始时,计时器开始
  2. 一首歌曲(随机挑选)显示在屏幕上
  3. 用户然后点击四个图标/名称之一(john,paul,george或ringo)
  4. 记录答案(正确或不正确)。
  5. 随机挑选另一首歌,直到计时器结束。
  6. 我不想解决这个问题,我只是想知道我是否使用了最好的数据结构......如果我(或者如果我不是!),我该如何去关于生成随机歌曲。我是新手,我想做的事情比以前尝试的任何事情都复杂得多。最后一点......当歌曲列表完成时,约翰和保罗的个人阵列将非常长......

    谢谢!

2 个答案:

答案 0 :(得分: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);




答案 1 :(得分: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. 随机,均匀地选择随机歌曲更容易。您当前的设置会让您难以随机均匀地选择一首歌。