montago >> Desværre, jeg tror ikke en simpel sort på sizenames er det jeg har brug for, da jeg egentlig skal bruge sizenames sorteret efter den tilhørende value i Sizes arrayet.
Egentlig skal mit sizes[] ikke sorteres. men mit sizenames[] array skal sorteres så jeg får produkt numrene ud i denne rækkefølge PROD470 PROD450 PROD440 PROD460 når jeg looper igennem dem således:
for (i=0; i<sizenames.length;i++) { alert( sizenames[i] ); }
Jeg har et CMS hvor der er oprettet nogle produkter som findes i forskellige størrelser, hver ny størrelse får sit eget ProduktNr.
Det jeg så skal hive ud i min frontend er et array som indeholde mine 'Sizes' koblet sammen med mit produktNr.
Jeg skal senere loope på mit array fordi jeg skal generere en html tabel som indeholder alle mine størrelser, og her skal de komme i rigtig række følge.
Jeg har lavet funktionen som generere min tabel, og det virker perfekt, bortset fra at 'sizes' kommer i vilkårlig rækkefølge. Jeg har ikke mulighed for i CMSen at sortere dem der.
Nu har jeg selv fundet løsningen på problemet, det endte ud med at dette script kunne løse mit problem.
function sort() { var mySizenames = arguments[0]; var mySizes = arguments[1]; var myNewSizenames = new Array(); // var tempA1 = new Array(); // var tempA2 = new Array(); //
// loop gennem mit mySizenames array for (i =0; i<mySizenames.length; i++) { // hent dens størrelse innerVal = parseInt(mySizes[mySizenames[i]]) insertAtPos = 0;
if (i == 0) { // Tilføj første produkt myNewSizenames[0] = mySizenames[0]; }
// hvis vi har tilføjet 1 produkt, skal vi checke om det // næste product skal ind før eller efter. if (i > 0) { // Loop igennem vare i det sorterede array. // Find den ud af om vores nye værdi skal ind først sidst eller i midten. for (j = 0; j < myNewSizenames.length; j++) { // tæl insertAtPos en op. if (innerVal > mySizes[myNewSizenames[j]]) { insertAtPos++ } }
// første gang vi tilføjer en ekstra skal den enten før eller efter if (myNewSizenames.length == 1) { // efter if (insertAtPos > 0) { myNewSizenames[myNewSizenames.length] = mySizenames[i]; } else { // før myNewSizenames.unshift(mySizenames[i]); } // når myNewSizenames indeholder flere skal vi finde ud af hvor i arrayet den nye skal indsættes } else { if (insertAtPos > 0) { // hvis insertAtPos == myNewSizenames.length skal den nye værdi indsættes i slutningen if (insertAtPos == myNewSizenames.length) { myNewSizenames[myNewSizenames.length] = mySizenames[i]; // ellers skal den indsættes et sted i arrayet. } else { // split myNewSizenames i 2. og indsæt den nye værdi i slutningen af den første tempA1 = myNewSizenames.slice(0,insertAtPos); tempA1[tempA1.length] = mySizenames[i]; tempA2 = myNewSizenames.slice(insertAtPos); myNewSizenames = tempA1.concat(tempA2); } } else { myNewSizenames.unshift(mySizenames[i]); } } } } return myNewSizenames; }
Du bør nok anvende objekter i stedet for arrays. Associative arrays, som de kendes fra andre sprog, findes ikke i JavaScript - og arrays er ikke et hensigtsmæssigt 'hack' at bruge ;o)
/mvh </bole>
Synes godt om
Ny brugerNybegynder
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.