0

次のデータセットがあるとしましょう

Company    S1   S2   S3
Apple.com  0.40 0.28 1.00
Google.com 0.30 0.58 0.99

上記がHTMLテーブルにあるとしましょう。

S1、S2、および S3 を個別にソートする方法を理解することができました。ただし、それらをグループに分類する方法を知りたいと思っています。

  • S1の最高から最低へとソートしている場合。アップルがトップであるべき
  • S2を最高から最低に並べ替える場合。Googleが一番上にあるはずです。
  • S1 と S2 に基づいて並べ替えると、平均が高いため、Google が一番上になるはずです。
  • 最後に、S1 と S3 に基づいて並べ替えると、Apple の方が高くなるはずです.... 生データはデータベースから取得され、PHP を使用して入力されます。PHP でこのロジックを実行できることは理解していますが、ユーザーがその場でリストを並べ替えることができるようにしたいと考えています*。

これを行うjQuery/Javascriptの方法はありますか? 編集:

これに注意してください。

作成者は、押されたときに各列を並べ替えます。ただし、2 つの列を「チェック」して、平均で並べ替える機能が必要です。

EDIT2:

平均する列の数を選択したい。ここで、n は [1..infinity] の要素です。

上だけが欲しい。つまり、逆ソートは必要ありません。

4

1 に答える 1

0

これをテーブルに戻すことができれば、プレーンオブジェクトのソートに基づいて、次のようなことができると思います。

var sortCompanies = function(cols, companies) {
    if (!cols || !cols.length) {
        companies.sort(function(a, b) {return a.name < b.name ? -1 : a.name > b.name ? 1 : 0});
        return companies;
    }
    companies.forEach(function(company) {
        company.sortKey = 0;
        cols.forEach(function(col) {
            company.sortKey += (company[col] || 0);
        });
    });
    companies.sort(function(a, b) {return b.sortKey - a.sortKey;});
    return companies;
};

var companies = [
    {name: 'Apple.com', S1: 0.40, S2: 0.28, S3: 1.00},
    {name: 'Google.com', S1: 0.30, S2: 0.58, S3: 0.99}
];

sortCompanies(['S1'], companies);             //=> Apple, Google
sortCompanies(['S1', 'S2'], companies);       //=> Google, Apple
sortCompanies(['S3'], companies);             //=> Apple, Google
sortCompanies(['S1', 'S2', 'S3'], companies); //=> Google, Apple
于 2013-07-09T20:14:55.023 に答える