2012-03-31 3 views
0

私は元の配列を変更するために作っていた問題を抱えていた、好奇心旺盛なことはarr.join("...").split("...")を追加することでこれを防ぐように見えるということです。この場合、オリジナルを変更してソートするのはなぜですか?

少し背景:私のスクリプトを作成し、arrayにコンテンツを追加し

  • この配列は、その後、私はのコピーを持ってしたい事が
  • arr[index] = "..."を渡して追加されたarr=[]
  • のように空の初期化arr私はソートを行うときに、orignial arrがここ

を修正する

  • をソートは何が起こっているかの簡易版である:

    var arr=[], sorted; 
    
    arr[0] = "hello"; 
    arr[1] = "world"; 
    
    //buggy, the original is sorted 
    //sorted = arr.sort(function(a,b){return (a.length-b.length);}); 
    
    sorted = arr.join("improbableCollision").split("improbableCollision").sort(function(a,b){return (a.length-b.length);}); 
    
    • .join("*").split("*")を追加しても問題が解決する理由?
    • この問題の原因は何ですか?
    • これを修正するよりエレガントな方法はありますか?

    フルスクリプトについては、これはあなたの元の配列のコピーに参加する()、その後、分割()操作の結果ので働くこのjsFiddle

  • 答えて

    3

    すべてが接合せずにソートし、分割、スライスまたは連結して配列をコピーする:

    varが= arr.slice(0).sort()

    2

    をご確認ください。

    +0

    なぜ単に 'arr.sort'を使用してソートこれをしないでください、私は、私はいつも分割/スライス/等オリジナルの変更の恐れなしで意味する – ajax333221

    +1

    それはちょうどarr.sortが動作する方法です、それは "インプレース"の並べ替えです。 – nicolaskruchten

    +0

    @nicolaskruchtenあなたの答えに感謝します。+1 – ajax333221

    関連する問題