在JS中随机播放数组并返回一个新数组

时间:2017-03-23 00:36:56

标签: javascript arrays random shuffle

我想知道如何改组数组并返回一个新数组。到目前为止,我已经在Stack Overflow中看到了这个解决方案:

How to randomize (shuffle) a JavaScript array?

这个解决方案可以很好地返回同一个洗牌的数组,但我真的不明白为什么。任何人都可以解释这个,并帮我修改它,以便它返回一个新的数组?

谢谢!

3 个答案:

答案 0 :(得分:3)

我知道创建数组副本的最简单方法是使用:

var newArray = [].concat(originalArray);

您可以在链接答案的大多数解决方案的第一行中执行该操作,并且您将获得一个新的数组,原始未触及。以下是关联问题的最高评分答案的修改版本:

function shuffle(originalArray) {
  var array = [].concat(originalArray);
  var currentIndex = array.length, temporaryValue, randomIndex;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

答案 1 :(得分:2)

对你有用

var original = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
var copy = [].concat(original);
copy.sort(function(){
  return 0.5 - Math.random();
});
console.log(copy);

答案 2 :(得分:0)

如果您想使用第三方库,Lodash对此非常有用。

只需使用_.shuffle()即可获得新阵列。