Avatar billede eazye Nybegynder
03. januar 2005 - 21:25 Der er 8 kommentarer og
1 løsning

at mixe et array?

hvordan er det muligt at "ryste pose" med et array, så indholdet skifter placering?
Avatar billede skovenborg Nybegynder
03. januar 2005 - 22:48 #1
jo, her er en mulighed:
<script type="text/javascript">
  function arrayShuffle(arr) {
        var return_array = new Array();
        var len = arr.length;
        var i = 0;
        while (len > 0) {
              num = Math.floor(Math.random()*len);
              return_array[i++] = arr[num];
              arr.splice(num,1);
              len = arr.length;
        }
        return return_array;
  }
  var a = ["a","b","c","d"];
  alert(arrayShuffle(a));
</script>
Avatar billede eazye Nybegynder
03. januar 2005 - 22:49 #2
tak - læg et svar :)
Avatar billede skovenborg Nybegynder
03. januar 2005 - 22:57 #3
værgso' og godt nytår :-)
Avatar billede roenving Novice
03. januar 2005 - 23:02 #4
-- og et alternativ, som jeg egentlig også tror er hurtigere:

<script type="text/javascript">
function shuffleArray(arr){
  var temp,num;
  for(i=0;arr.length>i;i++){
    num = Math.floor(Math.random()*arr.length);
    temp = arr[i];
    arr[i] = arr[num];
    arr[num] = temp;
  }
}
  var a = ["a","b","c","d"];
  alert(arrayShuffle(a));
</script>
Avatar billede roenving Novice
03. januar 2005 - 23:11 #5
Tjah, en lille test giver 250 ms med skovenborgs og 16 ms med min (som jeg har tyvstjålet fra grunken !-)

<script type="text/javascript">
function shuffleArray(arr){
  var temp,num;
  for(i=0;arr.length>i;i++){
    num = Math.floor(Math.random()*arr.length);
    temp = arr[i];
    arr[i] = arr[num];
    arr[num] = temp;
  }
  return arr;
}
  function arrayShuffle(arr) {
        var return_array = new Array();
        var len = arr.length;
        var i = 0;
        while (len > 0) {
              num = Math.floor(Math.random()*len);
              return_array[i++] = arr[num];
              arr.splice(num,1);
              len = arr.length;
        }
        return return_array;
  }
  var a = new Array();
  for(i=0;1000>i;i++)a[i]=i;
  var nu = new Date().getTime();
  alert(arrayShuffle(a)+"\n"+nu+"\n"+new Date().getTime());

  for(i=0;1000>i;i++)a[i]=i;
  nu = new Date().getTime();
  alert(shuffleArray(a)+"\n"+nu+"\n"+new Date().getTime());
</script>
Avatar billede skovenborg Nybegynder
03. januar 2005 - 23:19 #6
jaja, alting skal også gå så hurtigt i vores i forvejen stressede hverdag.

Men ja, den løsning er vist lidt mere fornuftig end min - havde ikke lige tænkt i den bane at bare bytte om på de forskellige array-felter (eller hvad man kalder dem). Til gengæld er kravet til strukturen af arrayet også lidt mere stram.
Avatar billede roenving Novice
03. januar 2005 - 23:25 #7
Hvad mener du med at den skal have en strammere struktur ?-)

-- og normalt bruger man vist termen array-elementer !-)
Avatar billede skovenborg Nybegynder
04. januar 2005 - 00:01 #8
tja, det kaldes nok heller ikke et array, men mere et objekt. Fx:
var a = new Array();
  a["a"] = "a";
osv.

Men det er ligemeget - mere en tanketorsk fra min side. Den vil heller vist heller ikke gå på min måde.
Avatar billede roenving Novice
04. januar 2005 - 00:05 #9
Jeg tror at man under alle omstændigheder får problemer med et associativt array, som jo blandt ikke kan svare på længden !-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester