1

我是 JSON 和 Javasript 的新手。

我有 JSON 格式的数据

var data = [
"FirstName: 'xyz', Lastname 'QSD', rollNo:'1',EntryDate:'2012-09-11T17:35:31.835+02:00'"

"FirstName: 'abc', Lastname 'qgr', rollNo:'2',EntryDate:'2012-08-11T17:35:31.835+02:00'"

]

我想根据 FirstName 或 roll no 或我选择的任何其他属性对其进行排序。

提前致谢。

4

4 回答 4

4

由于您将问题标记为dojo,因此这里是 dojo 方式 via dojo/store/Memory。还有一个Dojo Object Store教程。

请参阅 jsFiddle 中的以下代码:http: //jsfiddle.net/phusick/MGUBT/

require(["dojo/store/Memory"], function(Memory) {

    var data = [
        { FirstName: 'xyz', Lastname: 'QSD', rollNo: '1', EntryDate: '2012-09-11T17:35:31.835+02:00' },
        { FirstName: 'abc', Lastname: 'qgr', rollNo: '2', EntryDate: '2012-08-11T17:35:31.835+02:00' }
    ];

    var store = new Memory({ data: data });

    var sortedData = store.query(null, {
        sort:[{ attribute: "FirstName", descending: false }]
    });

    console.dir(sortedData);

});
​
于 2012-10-01T09:53:34.753 回答
2

如果data应该是一个包含对象的数组,你可以这样做:

data.sort(function(a,b) {
    return a.FirstName > b.FirstName;
})
于 2012-10-01T09:37:11.027 回答
2

第一个问题是数据的结构。你实际上有一个像这样的数组

var data = [ "foo", "bar" ];

这些字符串行包含序列化数据。所以首先我们需要通过这个 SO question中给出的任何方法来提取数据,例如 JSON 库方法:

var interpreted = [];
for(var i=0; i<data.length; ++i) {
    interpreted[i] = JSON.parse(data[i]);
}

现在我们有这样的结构:

[
    0: {
        'Firstname': 'xyz',
        'Lastname' : 'QSD', // there is a colon missing in the
                            // source, I'm guessing accidentally
        ...
    },
    1: {
        'Firstname' : 'abc',
        ...
    }
]

所以我们可以通过interpreted[i].Firstname. 现在我们可以通过传递一个比较函数,以与其他 SO 问题类似的方式进行排序:sort()

interpreted.sort(function(a,b) { 
    if(a.Firstname == b.Firstname)
        return 0;
    if(a.Firstname > b.Firstname)
        return 1;
    else
        return -1
} );

如果要降序排序,则需要交换 1 和 -1 的位置。

于 2012-10-01T09:45:09.573 回答
0

您的第一个问题是成员是字符串文字,而不是对象。但只要它们现在这样写,你就可以使用简单的 sort。写吧

data.sort();

并且数组将按名字排序。

你想要的是这样的:

var data = [
 {FirstName: 'xyz', Lastname 'QSD', rollNo:'1',EntryDate:'2012-09-11T17:35:31.835+02:00'},
 {FirstName: 'abc', Lastname 'qgr', rollNo:'2',EntryDate:'2012-08-11T17:35:31.835+02:00'}
]

然后,您可以使用提供您自己的比较器的 sort() 函数进行排序,如下所示:

data.sort(function (a, b) {
    return // return a positive number if a > b
           // use a.FirstName to access value of FirstName in a. 

})
于 2012-10-01T09:35:48.210 回答