2011-08-04 275 views
1

如果我有一个具有属性的对象数组,并且我想按特定属性对对象进行排序,那么我将如何能够执行此操作?例如,假设我有一堆news对象,每个对象具有date属性。如何使用对象属性对对象数组进行排序

我将如何能够按日期对JavaScript中的每个对象进行排序?

+0

这已被问了很多很多次。 –

回答

3

如果阵列是ARR:

arr.sort(function(a,b) { 
    return (a.date < b.date ? -1 : (a.date > b.date ? 1 : 0)); 
}); 
+0

对不起,你的意思是'日期'而不是'数据'? – locoboy

+0

是啊,我修好了 –

+0

这些外括号真的需要吗? –

0

您需要将自己的功能传递给.sort(),这样的事情:

someArray.sort(function(a, b) { 
    if (a.date < b.date) 
    return -1; 
    else if (a.date > b.date) 
    return 1; 
    return 0; 
}); 

你的功能只需要能够比较给定任意两个对象并返回负值或正值,具体取决于哪一个来自第一个或零,如果他们是平等的。 .sort()函数将负责其余部分。

这意味着您可以对您喜欢的任何属性进行排序,甚至(可选)为第一个属性相等的情况引入第二排序。您也可以通过否定您的返回值来控制升序与降序。

+0

糟糕,可能应该更多关注顶部的那条横幅,告诉我另一个答案已经发布。噢,我会毫不犹豫地离开我的回答,因为我和代码一起给了一个简短的解释。 – nnnnnn

0

你可以提供一个sort function到阵列的一种排序方法:

// Sample data 
var newsArray = [ 
    {date: '2010/8/12'}, 
    {date: '2012/8/10'}, 
    {date: '2011/8/19'} 
]; 

// Sorting function 
function sortNewsArray(arr) { 
    return arr.sort(function(a, b) { 
     return new Date(a.date) - new Date(b.date); 
    } 
); 
} 

提供的日期字符串可以简单地转换为日期这一点。如果没有,只需重新格式化,以便它们可以在数据或排序功能中使用。

初始顺序:

  1. 2010年8月12日
  2. 2012年8月10日
  3. 2011/8/19

排序顺序:

  1. 2010/8/12
  2. 2011/8/19
  3. 2012/8/10
相关问题