2010-12-03 12 views
1

私はURLの配列を持っており、現在のURLを一番上のメンバーに、残りをアルファベット順にしたいと考えています。 links配列は、アルファベット順に昇順で始まります。JavaScriptで配列をソートするにはどうすればいいですか?

links配列が...このようになります

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

しかし、私の現在のURLはhttp://stackoverflow.com/questionsかもしれません。これは上記の2番目のメンバーと一致する必要があります。

これを達成する最も良い方法は何ですか?

おかげ

答えて

5

なぜこの簡単なアプローチはありませんか?

  1. 現在のURLを配列から削除します。 Array.splice(Array.indexOf(url), 1)
  2. ソート配列をアルファベット順
  3. 使用Array.unshift()は、現在のURLに

あまりチェックし、単純なスプライスとアンシフトを付加します。

更新

あなたは現在のドメインと一致する必要がある場合。あなた自身を使用してアレイは-1を返しアップ

  • Bが一致した場合の項目には、それバブル作るために、それが滞在するために0を返し、場合AはURLと一致する現在の項目を機能
  • を比較

    1. ソートケースどちらもAまたはB、またはその両方AとBの試合URLで
    2. は、ちょうどそれら

    これはテストされソートするために、通常の比較ですが返されますが、理論的にはそれが動作するはずです。

  • +0

    申し訳ありませんが、URLは正確なURLではなく、ドメインのリストであることに言及してください。編集します。また、配列内の各リンクの 'href'プロパティにアクセスしていることがわかりますので、残念ながら' indexOf() 'で十分ではありません。あなたの答えをありがとう:) – alex

    +0

    '.sort(function(){...})アプローチで更新されました。 –

    +0

    更新いただきありがとうございます+1 – alex

    3

    答えを待っている間、私は

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

    がうまく動作するようです...これを思い付きました。

    +0

    @Marcel Korpel彼らはアルファベット順に始まりますが、このコードの後に​​はそのまま残っているようです。 – alex

    0

    なぜ.unshift()を使用しないのですか?

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

    私に何かが不足していますか?

    +0

    申し訳ありませんが、いくつかの関連情報を含めるのを忘れていました。私の編集を参照してください。 – alex

    関連する問題