【问题标题】:How to sort a data collection of objects using jQuery如何使用 jQuery 对对象的数据集合进行排序
【发布时间】:2012-10-13 12:42:32
【问题描述】:

我有一个动态的对象集合,我绑定到我页面上的 jQuery 模板。我在客户端拥有的这个对象集合是从我的服务器返回的List<T>,其中T 可以是任何类的任何对象。例如:

Class Employee
{
 string Name;
 int Id;
 int age;
}

Class Companies
{
  int CompId;
  string CompanyName;
  string CompanyLocation;
}

现在根据用户请求,我将发送List<Employee> 或List<Companies> 到客户端。现在我只是想知道我们是否可以在客户端使用 jquery 对这个列表进行排序。任何帮助将不胜感激。

【问题讨论】:

  • 那是什么语言?此外,您使用 JavaScript 进行排序,jQuery 是 DOM api 的包装器。
  • 该类在 C# 中。我将这些类的对象集合返回给我的客户端。我很乐意使用 jQuery 或 javaScript 对它们进行排序。例如,当我收到员工名单时,我想按他们的年龄/姓名/身份证进行排序。
  • @TijoThomas:将您的示例代码更改为您尝试过的内容。例如,在 JavaScript 中获取集合可以让我们了解您卡在哪里。
  • 它应该如何对对象进行排序,按什么?如果它们是完全通用的,那么客户端应该如何知道哪些属性可供排序?

标签: c# javascript jquery client-side jquery-templates


【解决方案1】:

这可能不是你想要的,但它应该给你一个足够好的想法来继续:

var list = [{
    prop1: 'a',
    prop2: 5
}, {
    prop1: 'b',
    prop2: 4
}, {
    prop1: 'c',
    prop2: 3
}, {
    prop1: 'd',
    prop2: 2
}, {
    prop1: 'e',
    prop2: 1
}];

function sort(propName, direction) {
    var dirOffset = direction === 'desc' ? -1 : 1;

    list.sort(function(a, b){
        a = a[propName];
        b = b[propName];

        if (a === b) {
            return 0;
        }

        var out = a < b ? -1 : 1;
        return out * dirOffset;
    });
}

function log(propName) {
    list.forEach(function(item){
        console.log(item[propName]);
    });
}

function sortAndLog(propName, direction) {
    console.log('Sorted by', propName, direction);
    sort(propName, direction);
    log(propName);
    console.log('------------------------------------');
}

sortAndLog('prop1', 'desc');
sortAndLog('prop1', 'asc');
sortAndLog('prop2', 'asc');
sortAndLog('prop2', 'desc');

【讨论】:

  • 谢谢你的回答,真的很有帮助
  • 也许如果我调用函数 $sort?
【解决方案2】:

jQuery 是一个操作 DOM 的库,在字符串方面不是最好的。我会说你检查underscore.js。

下划线文档非常简单。你会发现如何轻松实现你想要的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 2010-11-15
    • 1970-01-01
    • 2011-04-04
    相关资源
    最近更新 更多