0

重複の可能性:
Javascript 配列のソートと一意

そのための組み込みの jQuery 関数がないことに驚きました。

私はstackoverflowで多くのソリューションを見てきましたが、質問は機能しない回答で汚染されていました(機能するものを見つけるには、すべてをテストする必要がありました).

そこで、将来の参考のために、また他のユーザーの手間を省くために、この Q&A スタイルを投稿することにしました。

jQueryを使用して一意でソートされた配列値を返す方法は?

数字:

// input array
var inputArray = [10, 5, 15, 10, 5, 15];

// expected result array
var resultArray = [5, 10, 15];

文字列:

// input array
var inputArray = ['b', 'a', 'c', 'b', 'a', 'c'];

// expected result array
var resultArray = ['a', 'b', 'c'];
4

3 に答える 3

1

以前に尋ねられた質問の答えが悪いという理由だけで、以前に尋ねられた質問の代わりに、ここに私の答えを追加することにしますが、著者が決定を変更することを望んでいません。

ここで、私が提案するソリューションについてもう少し直感的に説明します。並べ替えはO(n log n)であり、重複の削除はO(n)であるため、操作全体はnlognよりも複雑ではないと結論付けます。ただし、考えてみると、nは決して増加しませんが、最初に重複を削除してから並べ替えると、おそらく減少します。したがって、表面上はまだO(n log n)ですが、一般的に高速になります。ハッシュテーブルの代わりにツリーに値を収集することで(他の言語で)おそらく改善できますが、JavaScriptの「ネイティブ」データ構造とカスタムデータ構造のパフォーマンスに大きな違いがあることを考えると、以下のソリューションが最適です。

function sortUnique(array) {
    "use strict";
    var table = {}, key, i;
    for (i = 0; i < array.length; i++) {
        table[[array[i]]] = '';
    }
    i = 0;
    for (key in table) {
        array[i++] = key;
    }
    array.length = i;
    return array.sort();
}
sortUnique(['b', 'a', 'c', 'b', 'a', 'c']);
// [ 'a', 'b', 'c' ]
于 2013-01-15T11:55:27.127 に答える
0

関数として:

function sort_unique(arr) {
    return arr.sort(function(a,b){
        return (a > b) ? 1 : -1;
    }).filter(function(el,i,a) {
        return (i==a.indexOf(el));
    });
}
于 2013-01-15T11:33:21.483 に答える
0

これがうまくいくことを願っています

var dummy = [10, 5, 15, 10, 5, 15];
var arr = [];
$.map(arr, function(n, i){
  if($.inArray(n, arr) == -1)
      arr.push(n);
});

現在 arr の値は一意です。これで、任意の並べ替えアルゴリズムを適用できます。

于 2013-01-15T11:45:06.810 に答える