根据属性对javascript数组进行排序

时间:2012-10-01 09:29:01

标签: javascript json dojo

我是JSON和Javascript的新手。我有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'"

]

我想根据名字或者掷骰或我选择的任何其他属性对其进行排序。

提前致谢。

4 个答案:

答案 0 :(得分:4)

由于您将问题标记为dojo,因此这是通过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);

});
​

答案 1 :(得分:2)

如果data应该是包含对象的数组,则可以执行以下操作:

data.sort(function(a,b) {
    return a.FirstName > b.FirstName;
})

答案 2 :(得分:2)

第一个问题是数据的结构。你有一个像

这样的数组
var data = [ "foo", "bar" ];

这些字符串包含序列化数据。首先,我们需要通过this 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访问名字。现在,我们可以通过sort() this other SO question传递与comparison function类似的方式进行排序:

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

如果要对降序进行排序,则需要交换1和-1。

答案 3 :(得分:0)

你的第一个问题是成员是字符串文字,而不是对象。但只要它们像现在一样编写,你就可以使用simple 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. 

})