根据属性对javascript数组排序

根据属性对javascript数组排序,javascript,json,dojo,Javascript,Json,Dojo,我不熟悉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或我

我不熟悉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或我选择的任何其他属性对它进行排序


提前感谢。

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

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. 

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

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

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. 

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

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

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

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

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

第一个问题是数据的结构。实际上有一个数组,如

var data = [ "foo", "bar" ];
这些字符串行包含序列化数据。因此,首先我们需要通过中给出的任何方法提取数据,例如JSON库方法:

var interpreted = [];
for(var i=0; i<data.length; ++i) {
    interpreted[i] = JSON.parse(data[i]);
}
因此,我们可以通过
解释[i].firstname
访问firstname。现在,我们可以通过传递
sort()
a以类似的方式进行排序:


如果要按降序排序,则需要交换1和-1。

第一个问题是数据的结构。实际上有一个数组,如

var data = [ "foo", "bar" ];
这些字符串行包含序列化数据。因此,首先我们需要通过中给出的任何方法提取数据,例如JSON库方法:

var interpreted = [];
for(var i=0; i<data.length; ++i) {
    interpreted[i] = JSON.parse(data[i]);
}
因此,我们可以通过
解释[i].firstname
访问firstname。现在,我们可以通过传递
sort()
a以类似的方式进行排序:


如果要按降序排序,则需要交换1和-1。

因为您将问题标记为
dojo
,下面是dojo方法。还有一个教程可以帮助你

请参阅下面在JSFIDLE上运行的代码:


由于您将问题标记为
dojo
,下面是dojo方法via。还有一个教程可以帮助你

请参阅下面在JSFIDLE上运行的代码:


这不是有效的JSON。它甚至不是有效的JavaScript。@Quentin:好的,我有这些数据,我想按名字排序,或者使用Java脚本滚动不它也不是真正的JSON,它是一个数组(这是一个不正确的数组,第一行末尾缺少逗号)。JSON看起来像:var data={rows:[{“firstname”:“joe”,“id”:1},{“firstname”:“jack”,“id”:2}]}@GameBuilder-你可以为它编写一个自定义解析器(这个问题太大了,无法在StackOverflow答案中完成所有步骤),也可以修复数据。或者查看我的答案。只要稍加格式化,字符串就可以被解析为JSON(尽管有上述批评,但非常接近),然后用比较函数排序。这不是有效的JSON。它甚至不是有效的JavaScript。@Quentin:好的,我有这些数据,我想按名字排序,或者使用Java脚本滚动不它也不是真正的JSON,它是一个数组(这是一个不正确的数组,第一行末尾缺少逗号)。JSON看起来像:var data={rows:[{“firstname”:“joe”,“id”:1},{“firstname”:“jack”,“id”:2}]}@GameBuilder-你可以为它编写一个自定义解析器(这个问题太大了,无法在StackOverflow答案中完成所有步骤),也可以修复数据。或者查看我的答案。只要稍加格式化,字符串就可以被解析为JSON(尽管有上述批评,但它非常接近),然后用比较函数进行排序。这不是函数应该返回的值,它是一个数字。好吧,那么
(a.FirstName>b.FirstName)*1
,但它应该是相同的。它不是。比较是三元的(更小、相等、更大),这就是为什么需要一个更小、相等或大于零的数字(通常是-1、0和1)。当a小于b时,返回0@Prinzhorn,但它无论如何都会工作,因为它会根据每个ascii值比较第一个字母
A=65,B=66,Z=90,A=97,…
-至少我认为这是ascii值?为什么我们还要争论:这不是函数应该返回的值,它是一个数字。好吧,那么
(A.FirstName>B.FirstName)*1
,但它应该是相同的。它不是。比较是三元的(更小、相等、更大),这就是为什么需要一个更小、相等或大于零的数字(通常是-1、0和1)。当a小于b时,返回0@Prinzhorn,但它无论如何都会工作,因为它会根据每个ascii值比较第一个字母
A=65,B=66,Z=90,A=97,…
-至少我认为这是ascii值?为什么我们还要争论:那么你需要一个对象数组而不是字符串数组。我会在帖子中写一个更详细的答案。然后你需要一个对象数组而不是字符串数组。我会在帖子里写一个更详细的答案。