2011-09-22 68 views
4

如果我有对象的列表:如何按日期升序排序对象?

var objectList= LIST_OF_OBJECT; 

每个对象在列表中包含三个属性: “”, “日期”, “性别

如何通过“date”属性升序来排序列表中的对象?

(以下简称 “日期” 属性包含像字符串值 “2002年8月29日21:15:31 + 0500”)

回答

6

Array.sort方法接受排序函数,它接受两个元素作为参数,并且应该返回:

  • < 0,如果第一小于所述第二
  • 0,如果第一个是等于第二
  • > 0,如果第一比越大第二。

objectList.sort(function (a, b) { 
    var key1 = a.date; 
    var key2 = b.date; 

    if (key1 < key2) { 
     return -1; 
    } else if (key1 == key2) { 
     return 0; 
    } else { 
     return 1; 
    } 
}); 

你很幸运的是,在日期格式您提供,那是另一个日期之前的日期也比<日期使用字符串比较时。如果不是这种情况下,你必须将字符串转换为日期第一:

objectList.sort(function (a, b) { 
    var key1 = new Date(a.date); 
    var key2 = new Date(b.date); 

    if (key1 < key2) { 
     return -1; 
    } else if (key1 == key2) { 
     return 0; 
    } else { 
     return 1; 
    } 
}); 
+0

我会通过与已经被解析效率之日起的每个值定义一个新的领域开始。 – Serabe

+0

如果它不是一个对象列表,而是一个包含对象的对象,并且我想对对象内的对象进行排序呢? – Leem

+0

@利姆:任何标准都没有描述什么顺序对象成员应该列举在(引文需要)。您应该将该对象转换为数组。 – Matt

2

如果你的对象有一个字符串领域内的日期信息:

yourArray.sort(function(a, b) { return new Date(a.date) - new Date(b.date) }) 

或者,如果他们有它日期内领域:

yourArray.sort(function(a, b) { return a.date - b.date }) 
+0

祝贺您在这里获得唯一理智的答案。 – Tom

0

你可以试试:

<script src="https://cyberknight.000webhostapp.com/arrange.js"> 
var a =[-1,0,5,4,3,2,6,1,1]; 
var b = totzarrange(a) 
console.log(b); 
</script> 
0
yourArray.sort(function(a, b) { 
a = new Date(a.date); 
b = new Date(b.date); 
return a >b ? -1 : a < b ? 1 : 0; 
})