在 JS 中打乱数组和 Return 一个新数组

Shuffle an Array and Return a New One in JS

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

How to randomize (shuffle) a JavaScript array?

此解决方案在 return 对同一个数组进行洗牌时非常有效,但我不太明白为什么。任何人都可以解释一下并帮助我修改它以使其 return 成为一个新数组吗?

谢谢!

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

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;
}

如果你想使用第 3 方库,Lodash 非常适合。

只需使用 _.shuffle(),即可获得新数组。

也许对你有用

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