我想知道如何改组数组并返回一个新数组。到目前为止,我已经在Stack Overflow中看到了这个解决方案:
How to randomize (shuffle) a JavaScript array?
这个解决方案可以很好地返回同一个洗牌的数组,但我真的不明白为什么。任何人都可以解释这个,并帮我修改它,以便它返回一个新的数组?
谢谢!
答案 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()
即可获得新阵列。