I have seen many questions concerning randomly selecting array items without repeating. However, most of them are answered by using the splice method. But this removes items
If you want to go through an array in random order without modifying the original array:
ary.slice()
(this will copy the array, but not its values if they are objects).var items = ["a", "b", "c", "d", "e", "f", "g"];
var copy = getShuffledCopy(items);
copy.forEach(function (el) {
console.log(el);
});
function getShuffledCopy(ary){
var copy = ary.slice();
shuffle(copy);
return copy;
}
function swap(ary, pos1, pos2) {
var tmp = ary[pos1];
ary[pos1] = ary[pos2];
ary[pos2] = tmp;
}
function shuffle(ary){
// Fisher-Yates shuffle
for(var i = ary.length - 1; i >= 1; i -= 1) {
swap(ary, Math.floor(Math.random() * i), i);
}
}