A matriz inschedulada significa interromper a ordem de todos os elementos da matriz.
Um método comum é passar uma função para o método de classificação nativo da matriz, que retorna aleatoriamente 1 ou -1 para alcançar o objetivo de organizar aleatoriamente elementos da matriz.
A cópia do código é a seguinte:
arr.sort (função (a, b) {return math.random ()>. 5? -1: 1;});
Embora esse método seja intuitivo, não é eficiente. Após o meu teste, ele atrapalhou uma variedade de 10.000 elementos, e o tempo necessário foi de cerca de 35ms (Firefox)
Eu sempre tive a excelente qualidade de quebrar a caçarola para perguntar o fim, então encontrei um método eficiente. Veja este texto original
A cópia do código é a seguinte:
if (! Array.prototype.Shuffle) {
Array.prototype.shuffle = function () {
for (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], este [i] = this [j], este [j] = x);
devolver isso;
};
}
Arr.Shuffle ();
Este método adiciona uma função ao Array.prototype, chamado Shuffle - mas o nome não importa, o importante é a sua eficiência.
Pegue a matriz de 10.000 elementos acima para testá -lo. São necessários apenas 7 ou 8 milissegundos para concluí-lo em ordem fora de ordem usando esse método.
Aumente os elementos da matriz em 10 vezes para 100.000 para testes. O primeiro método de classificação leva cerca de 500+ms, e o método do shuffle leva cerca de 40ms. A diferença é enorme.
Código de teste completo:
A cópia do código é a seguinte:
var count = 100000, arr = [];
for (var i = 0; i.5? -1: 1;});
Array.prototype.sort.call (arr, function (a, b) {return math.random ()>. 5? -1: 1;});
document.write (arr+'
');
var t1 = new Date (). getTime ();
document.write (t1-t);
// Os seguintes métodos são mais eficientes
if (! Array.prototype.Shuffle) {
Array.prototype.shuffle = function () {
for (var j, x, i = this.length; i; j = parseint (math.random () * i), x = this [-i], este [i] = this [j], este [j] = x);
devolver isso;
};
}
var t = new Date (). getTime ();
Arr.Shuffle ();
document.write ('
'+arr+'
');
var t1 = new Date (). getTime ();
document.write (t1-t);
Além disso, você notou o loop for no código do shuffle? Não tem a segunda metade! Ou seja, existe apenas para (..), mas não o seguinte {..}, para que você possa escrever dessa maneira! E ele realmente executou normalmente! É tão curioso que tenho que ir ao parque do blog para perguntar.