0

文字列の説明を持つ JavaScript オブジェクトの配列があります。大文字と小文字を削除し、HTML タグを削除してから、文字と数字以外のすべてを削除する単純化された並べ替えアルゴリズムを実装しようとしています。私は持っている:

DASHBOARD.todo_entries.sort(function(first, second)
  {
  var first_workbench = first.description.toLowerCase();
  var second_workbench = second.description.toLowerCase();
  first_workbench = first_workbench.replace(/<.*?>/, '');
  second_workbench = second_workbench.replace(/<.*?>/, '');
  first_workbench = first_workbench.replace(/[^_\w]/, '');
  second_workbench = second_workbench.replace(/[^_\w]/, '');
  console.log('"' + first_workbench + '", "' + second_workbench + '"');
  return (first_workbench > second_workbench);
  });

現在、次の説明を含むソート順を一貫して生成しています。

Testing: d.
Testing: e.
Test: a.
Testing: f.
Test: c.
Test: b.
Testing: g.
Testing: b.
Testing: a.
Test: d.
Testing: c.
Testing: h.
Testing: i.
Testing: j.
Testing: k.
Testing: l.

私が予想しているのは、「Test: [ad]」が順番に表示され、次に「Testing: [al]」が順番に表示されることです。

この順序を自然に生成するコードを作成する方法がわかりません。作成順と一致しません(「Test: [ad]」と「Testing: [al]」の作成時刻・順番が重なっていると思いますが、順番に個別に作成されています)。

変更されていない説明を < または > のいずれかと比較するように関数を設定した場合、同様の結果が得られますが、同一ではありません。少なくとも「テスト」/「テスト」内では、変更されていない辞書式検索は、私が望む検索の結果と一致するはずです。私は自分のコードを少し検索しましたが、その配列の順序を明らかに改ざんしているものは他に見つかりませんでした。

何か間違っていると思いますか?

ありがとう、

4

1 に答える 1

2

JSメソッドは、または別の正の数 ( を示す)、または別の負の数 ( を示す)、または(同等の値を示す)を返すArray.sortコンパレータ関数を取ります - MDN docsを参照してください。Yours はブール値を返すため、効果的にorのみが返されるため、正しく並べ替えられません。cmp(a, b)1a < b-1b > a010

試す

return first_workbench === second_workbench ? 0 :
    first_workbench > second_workbench ? 1 : -1;

または類似。

于 2014-01-10T23:27:55.423 に答える