Javascript依赖于对表列进行排序

时间:2013-07-09 19:36:45

标签: javascript ajax jquery

假设我有以下数据集

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中排序最高到最低。 Apple应该排在首位
  • 如果我从最高到最低排序S2。谷歌应该站在最前面。
  • 如果我根据S1和S2进行排序,Google应该排在首位,因为 他们的平均值更高。
  • 最后,如果我根据S1和S3排序,Apple应该更高...... 原始数据从数据库中提取并使用PHP填充。一世 明白我可以在PHP中执行此逻辑,但是,我想要用户 能够快速重新排序列表*。

任何jQuery / Javascript方式这样做? 修改

注意this

作者在按下时对每列进行排序。但是,我希望能够“检查”两列,并按平均值排序。

EDIT2:

我想选择n个列来平均。其中n是[1..infinity]的元素。

只想高高在上。也就是说,不需要逆向排序。

1 个答案:

答案 0 :(得分: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