在 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);
我想知道如何打乱数组和 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);