2010-12-03 9 views
1

Ich habe ein Array von URLs, und ich möchte, dass die aktuelle URL das oberste Mitglied und der Rest in alphabetischer Reihenfolge ist. Das Array links beginnt in alphabetischer Reihenfolge aufsteigend.Wie sortiere ich ein Array in JavaScript, um sicherzustellen, dass ein Element nach oben geht?

Die links Array sieht wie folgt aus ...

var links = [ 
    'http://example.com', 
    'http://example.net', 
    'http://stackoverflow.com' 
]; 

Aber meine aktuelle URL http://stackoverflow.com/questions sein kann. Dies sollte mit dem 2. Mitglied oben übereinstimmen.

Was ist der beste Weg, dies zu erreichen?

Dank

Antwort

5

Warum nicht diese einfache Methode?

  1. Entfernen Sie die aktuelle URL aus dem Array, z. Array.splice(Array.indexOf(url), 1)
  2. sortieren das Array alphabetisch
  3. Verwenden Array.unshift() die aktuelle URL

Weniger Kontrollen Zierer nur eine einfache Spleiß und unshift.

aktualisieren

Wenn Sie die aktuelle Domäne übereinstimmen müssen.

  1. Sortieren des Array vergleichen Sie Ihre eigene Funktion
  2. Falls das aktuelle Element A die URL übereinstimmt, -1 zurück, um es nach oben zu machen Blase
  3. Falls Artikeln B übereinstimmt, 0 zurück, um es bleiben zu machen
  4. Falls weder A oder B oder A und B auf Übereinstimmung mit der uRL, kehren nur den normalen Vergleich sie

zu sortieren Dies ist nicht getestet, aber in der Theorie sollte es funktionieren.

+0

Entschuldigung, ich sollte erwähnen, dass die URL nicht die genaue URL ist, nur eine Liste von Domains. Wird bearbeiten. Außerdem kann ich sehen, dass ich auf die 'href'-Eigenschaft jedes Links im Array zugreife, so dass ein 'indexOf()' leider nicht ausreicht. Danke für deine Antwort :) – alex

+0

Aktualisiert mit einem '.sort (function() {...})' Ansatz. –

+0

Danke für dein Update +1 – alex

3

Während für eine Antwort zu warten, kam ich mit diesem nach oben ...

var matchRegex = new RegExp('^' + RegExp.escape('http://' + window.location.hostname)); 

var newLinks = []; 

for (var i = 0, linksLength = links.length; i < linksLength; i++) { 

     if (links[i].href.match(matchRegex)) { 
      newLinks.push(links[i]); 
      links.splice(i, 1); 
      break; 
     }; 

}; 

newLinks = newLinks.concat(links); 

gut zu funktionieren scheint.

+0

@Marcel Korpel Sie beginnen jedoch in alphabetischer Reihenfolge und scheinen nach diesem Code so zu bleiben. – alex

0

Warum verwenden Sie .unshift() nicht?

links.sort(); //first sort alphabetically 
links.unshift(thisURL); //then add the current URL to the top 

Fehle ich etwas?

+0

Entschuldigung, ich habe vergessen, einige relevante Informationen hinzuzufügen. Siehe meine Bearbeitung. – alex

Verwandte Themen