Javascript依赖于对表列进行排序

Javascript dependently sort table columns

本文关键字:排序 依赖于 Javascript      更新时间:2023-09-26

假设我有以下数据集

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的最高到最低排序。苹果应该处于领先地位
  • 如果im从最高到最低对S2进行排序。谷歌应该处于领先地位
  • 如果我根据S1和S2进行排序,谷歌应该会名列前茅,因为他们的平均水平更高
  • 最后,如果我根据S1和S3进行排序,苹果应该更高。。。。这个原始数据是从数据库中提取并使用PHP填充的。我理解我可以在PHP中执行此逻辑,但是,我希望用户能够动态重新排序列表*

有jQuery/Javascript的方法吗?编辑:

注意这一点。

按下按钮时,作者会对每一列进行排序。但是,我希望能够"检查"两列,并按它们的平均值进行排序。

第2版:

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

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

我认为这样的东西可以做到,基于对普通对象的排序,如果你可以将其返回到你的表中:

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