4 Stimmen

Wie sortiere ich ein Array in JavaScript, um sicherzustellen, dass ein Element an den Anfang kommt?

Ich habe ein Array von URLs, und ich möchte, dass die aktuelle URL das oberste Mitglied ist, und der Rest in alphabetischer Reihenfolge. Die links Array beginnt in alphabetischer Reihenfolge aufsteigend.

Le site links Array sieht so aus...

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

Aber meine aktuelle URL könnte lauten http://stackoverflow.com/questions . Dies sollte mit dem 2. Mitglied oben übereinstimmen.

Wie lässt sich dies am besten erreichen?

Merci

8voto

Ivo Wetzel Punkte 45471

Warum nicht dieser einfache Ansatz?

  1. Entfernen Sie die aktuelle URL aus dem Array, z.B. Array.splice(Array.indexOf(url), 1)
  2. Das Array alphabetisch sortieren
  3. Utilice Array.unshift() um die aktuelle URL voranzustellen

Weniger Kontrollen, nur ein einfaches Verbinden und Aufheben der Verschiebung.

更新情報

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

  1. Sortieren Sie das Array mit Ihrer eigenen Vergleichsfunktion
  2. Falls das aktuelle Element A mit der Url übereinstimmt, wird -1 zurückgegeben, um es in die Luft zu jagen
  3. Falls Element B übereinstimmt, wird 0 zurückgegeben, damit es bleibt
  4. Falls weder A noch B oder sowohl A als auch B mit der Url übereinstimmen, wird einfach der normale Vergleich zurückgegeben, um sie zu sortieren

Dies ist nicht getestet, aber theoretisch sollte es funktionieren.

3voto

alex Punkte 457905

Während ich auf eine Antwort wartete, kam ich auf diese Idee...

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);

Scheint gut zu funktionieren.

0voto

bozdoz Punkte 11750

Warum verwenden Sie nicht .unshift()?

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

Habe ich etwas verpasst?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X