2016-05-06 22 views
1

私はこれに類似し、むしろごく標準的なJSの配列、得た:私はそのように見えるよう、常に2つの要素が同じであることを伝える機能を並べ替えてしまった異なるブラウザでJavaScriptのソート曖昧

"entities": [ 
    { 
     "id": "1111", 
     "options": { 
     "label": "Label", 
     "choices": [ 
      { 
      "value": "222222" 
      }, 
      { 
      "value": "444444" 
      } 
     ] 
     } 
    }, 
    { 
     "id": "2222", 
     "options": { 
     "label": "Label", 
     "choices": [ 
      { 
      "value": "333333" 
      }, 
      { 
      "value": "555555" 
      } 
     ] 
     } 
    }, 
... 

を:

function sortF(a,b){ 
    return 0; 
} 

今、私のようなエンティティの配列をソート:、全く変化はここに私の予想される動作ではありません

entities.sort(sortF); 

結果はブラウザによって異なります。例えばIE上では問題ありませんが、Chrome上では配列の順序が変わります。 MDNで

私は、ソートの説明の下にこれを気づいてではなく、これは関連性があるかどうかわから:

は、compareFunctionは(a、b)は0を返した場合、お互いに に関してaとbそのままを残すが、すべての異なる 要素に関してソートされています。注:ECMAscript標準では、これは保証されません。

すべてのブラウザで同じように動作させるにはどうすればよいですか?私のソート関数が2つの要素が等しいと言っていれば、ソート関数はそのままの状態にしておきたい。

+0

は、なぜあなたはこれをやっている、元の配列と同じソート順での安定したソートを?配列を複製する必要がある場合は、https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sliceを使用してください。 「並べ替え」が本当に最善の方法であれば、http://stackoverflow.com/questions/3195941/sorting-an-array-of-objects-in-chrome/3195977#3195977 –

+0

実際には私のsortF関数はより複雑ですが、0を返すように減らしましたが、まだこの問題があります – rumburak

+1

*ソートは必ずしも安定していません。* https://developer.mozilla.org/en-US/docsから/ Web/JavaScript/Reference/Global_Objects/Array/sort –

答えて

2

私は、ソートのために自分の財産と安定したソートを行うことをお勧め:

entities.forEach(function (a, i) { 
    a.origin = i; 
}); 


function sortF(a, b){ 
    return a.origin - b.origin; 
} 

entities.sort(sortF); 

結果、