少し前に、非常に魔法の問題が私の同僚のコードに巻き込まれました。大まかなプロセスは、属性Aがソートに使用されるオブジェクトで構成される配列をソートすることであり、属性Bは好ましい条件です。 Bが1に等しい場合、値Aが何であっても、最初にランク付けされます。これは非常に簡単な問題です。問題は、彼がソートを2回使用してソートを実装し、最初にaの属性に従ってソートを行い、次にbの値に応じてソートすることです。問題は2回目のソートにあります。
最初の並べ替えでは、aの属性に従ってアレイが大きいものから小さく分類されていることを当然と思います。 2回目では、元の配列の順序を移動する必要はありません(通常はメソッドで0または-1を返すと書かれています)、Bの要素に1に等しい要素に言及することのみを検討してください。しかし、実際、これは言語で選択されたソートアルゴリズムに関連しています。 JavaScriptの組み込みの種類の方法(および他の言語)は、いくつかの種類のアルゴリズムのコレクションを使用しますが、同じ要素の位置が一貫していることを保証できない場合があります。
以下は、StackoverFlowから見つかった例です
コードコピーは次のとおりです。
var arraytosort = [
{name: 'a'、strength:1}、{name: 'b'、strength:1}、{name: 'c'、strength:1}、{name: 'd'、strength:1}、
{name: 'e'、strength:1}、{name: 'f'、strength:1}、{name: 'g'、strength:1}、{name: 'h'、strength:1}、
{name: 'i'、strength:1}、{name: 'j'、strength:1}、{name: 'k'、strength:1}、{name: 'l'、strength:1}、
{name: 'm'、strength:1}、{name: 'n'、strength:1}、{name: 'o'、strength:1}、{name: 'p'、strength:1}、
{name: 'q'、strength:1}、{name: 'r'、strength:1}、{name: 's'、strength:1}、{name: 't'、strength:1}
];
arraytosort.sort(function(a、b){
B.Strength -A.Strengthを返します。
});
arraytosort.foreach(function(element){
console.log(element.name);
});
最後の要素の値はまだAからTまでであると思いますが、実際の結果は順調です。これは、ソートアルゴリズムが元の配列の順序、つまり不安定なものを保持していないためです。
次に、この状況を避けようとする必要があります。私の同僚の例では、2種類の論理を1つに統合することは実行可能な方法です。複数のソートに分割する必要がある場合、元の配列の順序は要素の属性に記録されます。