ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の誤った使用例 Sort_javascript のヒント

JavaScript の誤った使用例 Sort_javascript のヒント

WBOY
WBOYオリジナル
2016-05-16 16:08:341094ブラウズ

つい最近、同僚のコードで非常に魔法の問題が発生しました。一般的なプロセスは、オブジェクトで構成される配列をソートするために使用され、b が優先条件として使用されるというものです。 1 に等しい a の値が何であっても、それが最初に来ます。これは非常に単純な質問ですが、問題は、今回のソートを実装するために、sort を 2 回使用し、最初に a の属性に従ってソートし、次に b の値に従ってソートしていることです。問題は 2 番目の種類にあります。

最初の並べ替えでは、配列が a の属性に従って大きいものから小さいものへと並べ替えられたことは当然のことと考えます。2 回目の並べ替えでは、元の配列 (通常は記述されている) の順序を変更する必要がないだけです。 0 または -1 を返すメソッドでは)、b が 1 に等しい要素を前面に置くことのみを考慮してください。しかし実際には、これは言語によって選択された並べ替えアルゴリズムに関連しており、JavaScript (および他の言語) の組み込みの並べ替えメソッドは複数の並べ替えアルゴリズムのコレクションを使用しており、同じ要素の位置が保証されない場合があります。一貫している。

以下は stackoverflow

から見つかった例です。

コードをコピーします コードは次のとおりです:

var arrayToSort = [
{名前: 'a'、強さ: 1}、{名前: 'b'、強さ: 1}、{名前: 'c'、強さ: 1}、{名前: 'd'、強さ: 1}、
{名前: 'e'、強さ: 1}、{名前: 'f'、強さ: 1}、{名前: 'g'、強さ: 1}、{名前: 'h'、強さ: 1}、
{名前: 'i'、強さ: 1}、{名前: 'j'、強さ: 1}、{名前: 'k'、強さ: 1}、{名前: 'l'、強さ: 1}、
{名前: 'm'、強さ: 1}、{名前: 'n'、強さ: 1}、{名前: 'o'、強さ: 1}、{名前: 'p'、強さ: 1}、
{名前: 'q'、強さ: 1}、{名前: 'r'、強さ: 1}、{名前: 's'、強さ: 1}、{名前: 't'、強さ: 1}
];

arrayToSort.sort(function (a, b) {
b.strength - a.strength;
を返します。 });

arrayToSort.forEach(関数 (要素) {
console.log(要素.名);
});

最後の要素の値はまだ a から t であると考えられますが、実際の実行結果は順序が狂っています。これは、ソート アルゴリズムが元の配列の順序を保持しておらず、不安定であるためです。

このような状況が起こらないように最善を尽くす必要があります。私の同僚の例で言えば、2 つのソートのロジックを 1 つにマージすることが可能です。複数のソートに分割する必要がある場合は、マージする必要があります。元の配列のロジック 順序は要素の属性に記録されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。