【问题标题】:Sorting an array in javascript based on date基于日期在javascript中对数组进行排序
【发布时间】:2016-07-16 21:16:24
【问题描述】:

我正在尝试在 Google 脚本中解析多个 subreddit 提要。我可以调用这个 Google 脚本 (redditFeeds()),它会将标题、链接和日期返回到我的电子表格。但是,我想按日期对帖子进行排序,以便我可以首先看到最新的帖子。我已经尝试以各种方式在数组上使用 sort() 并且无法按降序日期排序。我什至尝试将日期转换为 Date 对象,但这并没有解决它。

function redditFeeds() {

  var entries_array = [];
  var subreddit_array = ['https://www.reddit.com/r/funny/top/.rss','https://www.reddit.com/r/news/top/.rss']

  for (var s = 0; s < subreddit_array.length; s++) {

    var xml = UrlFetchApp.fetch(subreddit_array[s]).getContentText();
    var document = XmlService.parse(xml);
    var root = document.getRootElement();
    var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');
    var entries = document.getRootElement().getChildren('entry', atom);

    for (var i = 0; i < entries.length; i++) {
      var title = entries[i].getChild('title', atom).getText();
      var title = entries[i].getChild('link', atom).getText();
        var link = entries[i].getChild('link', atom).getAttribute('href').getValue();
      var date = entries[i].getChild('updated', atom).getValue();
      entries_array.push([title, link, date]);
    }
  }

  //return entries_array;

  //doesn't work
  //entries_array.sort(function(a,b) { 
  //  return a.date - b.date;
  //});

  //also not working
  return entries_array.sort(function(a,b) { 
    new Date(a.date).getTime() - new Date(b.date).getTime();
  });

}

【问题讨论】:

标签: javascript arrays sorting google-apps-script


【解决方案1】:

我认为您想要以下内容,假设 entries_array 看起来像我认为的那样。我不知道start 应该在你的代码中是什么...我认为entries_array 中的每个条目都是一个包含三个成员的数组,第三个是某种日期的表示形式。如果它可以被new Date 解析,那么这段代码应该可以工作:

return entries_array.sort(function (a, b) { 
  return new Date(a[2]) - new Date(b[2]);
});

如果不对,请分享entries_array 的样子。

【讨论】:

  • "start" 是一个错字,应该是"date",但您的解决方案对我有用。谢谢!
  • 对,这两种方式都不起作用,只是想回应您关于“开始”没有意义的观点。
  • @Keith 这和date 一样有意义。 :-)
【解决方案2】:

我看到内部排序函数中缺少返回,您不应该需要 getTime()

 return entries_array.sort(function(a,b) { 
    return new Date(a.start) - new Date(b.start);
  });

【讨论】:

  • 这是真的,但我相信a.startb.start 都是undefined,所以这不会解决问题。
  • 肯定是的,但是OP的问题是和排序有关的,我没有尝试查看数据是否有效
【解决方案3】:

对日期对象进行排序的一种简单方法是使用 dateObj.getTime() 将它们转换为 UNIX 时间戳。这将创建自 1970 年元旦午夜以来的整数秒。如果您在多个时区工作,这将非常有用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-04-25
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多