我是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'"
]
我想根据名字或者掷骰或我选择的任何其他属性对其进行排序。
提前致谢。
答案 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.
})