按相关日期排序新闻项目 - Javascript

时间:2014-05-12 13:18:58

标签: javascript arrays sorting date

我一直试图解决这个问题一段时间没有成功。我有2个阵列:

var dates = [
    new Date(2014, 4, 11, 10, 10, 0).getTime(),
    new Date(2012, 4, 10, 8, 20, 0).getTime(),
    new Date(2013, 4, 9, 7, 20, 0).getTime(),
    new Date(2010, 4, 7, 12, 59, 0).getTime()
            ];

var newsItems = ["NewsItem1","NewsItem2","NewsItem3","NewsItem4"];

我正在使用var desc = dates.sort(function(a,b){return b-a});功能 然而,为了对日期数组进行排序,我还没有能够弄清楚如何重新排列newsItems数组以使其与日期数组对齐。我尝试了这个但它似乎不起作用:

var datesDuplicate = [
    new Date(2014, 4, 11, 10, 10, 0).getTime(),
    new Date(2012, 4, 10, 8, 20, 0).getTime(),
    new Date(2013, 4, 9, 7, 20, 0).getTime(),
    new Date(2010, 4, 7, 12, 59, 0).getTime()
            ];
for(var i = 0; i < arrayLength; i++){
    for(var j = 0; j < arrayLength; j++){
        if(dates[i] == datesDuplicate[j]){
            document.getElementById(getElement(i)).innerHTML = newsItems[j];
            break;
        }
    }

}

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:3)

如果您希望新闻项和日期相互关联,则它们应该属于同一个对象。

 var items = [
   { date: new Date(2014, 4, 11, 10, 10, 0).getTime(), label: "NewsItem1" },
   { date: new Date(2012, 4, 10, 8, 20, 0).getTime(), label: "NewsItem2" },
   etc...
 ];

然后您可以将其排序为

 var desc = items.sort(function(a,b){return b.date-a.date});

答案 1 :(得分:2)

尝试这样的事情

var news = [
   {date: new Date(2014, 4, 11, 10, 10, 0).getTime(), item: "NewsItem1" },
   {date: new Date(2012, 4, 10, 8, 20, 0).getTime(), item: "..." },
   {date: new Date(2013, 4, 9, 7, 20, 0).getTime(), item: "..." },
   {...}
];

您也需要调整排序功能。如果必须从两个数组转换,请尝试使用zip将它们组合到上述结构中。

答案 2 :(得分:0)

通过将日期与newsItems配对,可以改善您的抽象:

var datePairs = 
[
  ["NewsItem1", new Date(2014, 4, 11, 10, 10, 0).getTime()],
  ["NewsItem2", new Date(2012, 4, 10, 8, 20, 0).getTime()],
  ["NewsItem3", new Date(2013, 4, 9, 7, 20, 0).getTime()],
];

var desc = datePairs.sort(function(a,b){return b[1]-a[1]}); //sort by date (the second element of each element)

答案 3 :(得分:0)

如果你对数据的结构没有任何控制,并且被2个阵列(密集且长度相同)所困扰,那么使用ECMA5方法就可以对它们进行排序。

的Javascript

var dates = [
        new Date(2014, 4, 11, 10, 10, 0).getTime(),
        new Date(2012, 4, 10, 8, 20, 0).getTime(),
        new Date(2013, 4, 9, 7, 20, 0).getTime(),
        new Date(2010, 4, 7, 12, 59, 0).getTime()
    ],
    newsItems = ["NewsItem1", "NewsItem2", "NewsItem3", "NewsItem4"];

dates.map((function (date, index) {
    return {
        date: date,
        item: this[index]
    };
}), newsItems).sort(function (a, b) {
    return b.date - a.date;
}).forEach(function (record, index) {
    dates[index] = record.date;
    newsItems[index] = record.item
});

console.log(dates, newsItems);

输出

[1399795800000, 1368076800000, 1336630800000, 1273229940000] ["NewsItem1", "NewsItem3", "NewsItem2", "NewsItem4"] 

jsFiddle