我如何在不匹配的情况下随机播放两个js数组

时间:2019-05-16 14:55:40

标签: javascript

我正在制作一种类似于youtube音乐的随机播放功能,当您单击按钮时,它可以随机播放列表顺序(而不仅仅是随机选择一首歌曲并忽略列表顺序)。但我无法在不使配对不匹配的情况下对其进行洗牌。

这是VisuJams的更新功能。我已经在其他人发布的问题上尝试了几个答案,但是该页面最终只是忽略了随机播放功能。

this.fileNames = [
//some song files
    ];

this.trackTitles = [
//matching song titles
    ];
window.onload = shuffleorder()

function shuffleorder(){
//part i cannot figure out :(
}

我想要的是脚本能够对两个列表进行混洗,而不会使对不匹配,并希望页面实际上能够确认操作

2 个答案:

答案 0 :(得分:2)

正如其他人所评论的,将文件名和轨道存储为单个数组内的组合对象会更好。

无论如何,如果要使用两个数组,则必须确保将两个数组中的相同元素随机化。因此,如果用文件名的元素1切换元素3,请对trackTitles进行同样的操作。

这里是一个示例:

this.fileNames = ["fileA", "fileB", "fileC"];
this.trackTitles = ["titleA", "titleB", "titleC"];

function shuffle() {
  var tempA;
  var tempB;
  for (var a = 0; a < fileNames.length; a++) {
    tempA = fileNames[a];
    tempB = Math.floor(Math.random() * fileNames.length);
    fileNames[a] = fileNames[tempB];
    fileNames[tempB] = tempA;

    tempA = trackTitles[a];
    trackTitles[a] = trackTitles[tempB];
    trackTitles[tempB] = tempA;
  }
}

shuffle();
console.log(fileNames);
console.log(trackTitles);

答案 1 :(得分:1)

使用此方法将其随机化:

var array1 = ["a", "b", "c"];
var array2 = [1, 2, 3];
var currentIndex = array1.length, temporaryValue, randomIndex;
while (0 !== currentIndex) {
  randomIndex = Math.floor(Math.random() * currentIndex);
  currentIndex -= 1;
  temporaryValue = array1[currentIndex];
  array1[currentIndex] = array1[randomIndex];
  array1[randomIndex] = temporaryValue;
  temporaryValue = array2[currentIndex];
  array2[currentIndex] = array2[randomIndex];
  array2[randomIndex] = temporaryValue;
}
console.log(array1);
console.log(array2);