如何根据两个对象的属性对对象数组进行排序?

时间:2013-11-05 16:50:32

标签: javascript jquery arrays object

我有以下对象数组:

eventJsonArr[0] = { eventName: "Event One", eventYear "2012"}
eventJsonArr[1] = { eventName: "Event Two", eventYear "2011"}
eventJsonArr[2] = { eventName: "Event Three", eventYear "2012"}
eventJsonArr[3] = { eventName: "Event Four", eventYear "2013"}
eventJsonArr[4] = { eventName: "Event Five", eventYear "2010"}
eventJsonArr[5] = { eventName: "Event Six", eventYear "2011"}

无论如何我可以根据每个对象的属性对这个数组进行排序吗?简而言之:我所需要的只是能够按eventYear按降序排序对象数组,然后按eventName按升序排序。

我想我需要它来模仿SQL如果eventNameeventYear是列的话会做什么,数组的每个索引都是行,并且它包含ORDER BY eventYear DESC, eventName ASC

我需要将它与“页面预览”一起使用,因此它必须与我设置的查询实际数据库的页面完全相同(如上所述)。

其他信息:

我实际上是.push()在jquery .each()循环中一次一个值,所以如果需要做某些事情,因为我实际上是将值添加到数组中,而不是实际上对完整值数组进行排序,这可以完成(虽然,我不确定那里需要的逻辑)。

以下是我在发布此问题之前尝试过的事项:

eventJsonArr.sort() //As a start, just to see what it did.

然后:

evenJsonArr.sort(function(a, b) { //I got the basic function to sort, which it did.
    a.eventYear - b.eventYear
});

除了这个功能,我真的找不到任何与我的情况相关的东西。至少不是我找到的。

以下是我试图研究的一些页面来帮助我:

1 个答案:

答案 0 :(得分:4)

  

“我需要的是能够先按eventYeardescending顺序排序对象数组,然后按eventName顺序按ascending排序。“

eventJsonArr.sort(function(a, b) {  //     eventYear DESC
    return a.eventYear !== b.eventYear ? b.eventYear - a.eventYear :
                                         a.eventName.localeCompare(b.eventName);
});                                 //     eventName ASC