我有以下内容,然后我想将数组恢复到其原始状态,并将输出发布到console.log。但我有点迷失了方向:
$(document).ready(function(){
var cards=new Array(
'clu01',
'clu02',
'clu03',
'clu04',
'clu05',
'clu06',
'clu07',
'clu08',
'clu09',
'clu10',
'clu11',
'clu12',
'clu13',
'dia01',
'dia02',
'dia03',
'dia04',
'dia05',
'dia06',
'dia07',
'dia08',
'dia09',
'dia10',
'dia11',
'dia12',
'dia13',
'hea01',
'hea02',
'hea03',
'hea04',
'hea05',
'hea06',
'hea07',
'hea08',
'hea09',
'hea10',
'hea11',
'hea12',
'hea13',
'spa01',
'spa02',
'spa03',
'spa04',
'spa05',
'spa06',
'spa07',
'spa08',
'spa09',
'spa10',
'spa11',
'spa12',
'spa13'
);
function Shuffle(o) {
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
Shuffle(cards);
console.log(cards);
});
发布于 2014-03-06 01:23:21
如果原始数组按字母顺序排序,则只需执行一个sort()
cards.sort()
您还可以定义自定义排序函数:
cards.sort( function(a, b) {
// some logic to compare 2 values to see which goes first
// return 1 if a comes after b
// return -1 if a comes before b
// return 0 if they are the same (this usually means whichever came first will be first)
});
发布于 2014-03-06 01:24:59
我这样做的方式是拥有一个独立的索引数组,与数组的长度相同。因此,例如,
var cards = ['clu01', 'clu02','clu03'];
您可以创建
var indices = [0, 1, 2];
现在,当您进行随机操作时,比较原始数组,但对索引数组进行随机操作。因此,从本质上讲,您是在打乱数组中的位置,而不是元素本身。这样,您可以将这两种状态保持分离,并且可以在任何时候访问这两种状态,而不会产生太多开销。
要访问随机播放,请执行以下操作:
cards[indices[i]];
要访问原始文件,请执行以下操作:
cards[i];
发布于 2014-03-06 01:26:50
考虑到重新整理卡片的时间和麻烦,你可能会有两个数组,你的源“排序”数组和你的随机数组。当你想对数组进行排序时,只需使用源数组即可。当你想打乱一个数组时,你可以重新打乱“打乱”的数组,或者复制一份源代码并打乱。
战争已经胜利了,你已经可以洗牌了。
https://stackoverflow.com/questions/22204656
复制相似问题