【问题标题】:How to get the last item in an object by sorted key order如何通过排序键顺序获取对象中的最后一项
【发布时间】:2015-01-13 16:05:07
【问题描述】:

假设我有一个具有这种结构的对象:

{
        "friends_count": {
            "1420800660": 49391,
            "1421149814": 49344,
            "1421149955": 49344
        }
}

在对象中,第一个数字(键)是时间戳。第二个数字是值。我想获取该对象的最新项目。所以,我需要得到最接近时间的密钥。我该怎么做?

【问题讨论】:

  • 你有一个对象而不是数组
  • book.mixu.net/node/ch5.html 这是我在google中写“nodejs array”找到的第一个结果。它涵盖了数组、对象和 JSON 的基础知识。您拥有的不是数组,google提供的第一个结果可以向您解释这一点;)。尽管有人会回答,但我个人还是建议您先查看一些有关 javascript 的教程,然后再进入 nodejs。
  • @KrisHollenbeck 认为,就位置而言,欺骗是最后的,并且忽略了关键值。这是根据键的可排序值本身,而不是纯粹的位置/插入时间。

标签: javascript arrays node.js


【解决方案1】:

所以,我需要获取时间最近的密钥

当然。只需在obj.friends_count 上拨打Object.keys,然后再拨打sort

var key = Object.keys(obj.friends_count).sort()[0];

Object.keys 返回所提供对象的键数组,Array.sort 将按升序对其进行排序,[0] 将采用 已排序 数组的第一个元素。

Array.sort 在这里可以正常工作,因为它们的长度相同,并且一切都应该没问题。如果你想更清楚,那就是arr.sort(function(a, b){ return a - b })[0]

【讨论】:

  • 我相信您需要数组的最后一项(除非时间戳属于未来),而不是第一项。检查索引是否存在也是一个好主意。无论如何都投赞成票:)
  • 数字的默认排序是错误的。它适合这种情况,但多年后它不会。我认为正确的做法是一种很好的做法。
  • @AmitJoki 我不这么认为。 ["4", "30", "5"].sort() 会返回 ["30", "4", "5"] 是错误的
  • @ArūnasSmaliukas 时间戳的长度相同,在这种情况下它肯定会起作用。 ["31", "40", "20"].sort() 将返回 ["20", "31", "40"]
【解决方案2】:

如果您想从关键时间戳中获取最新信息,只需将其转换为日期即可:

var something = {
            "friends_count": {
                "1420800660": 49391,
                "1421149814": 49344,
                "1421149955": 49344
            }
    },
    dateCheck,
    newest;

for(var key in something.friends_count){
    if(!dateCheck || new Date(key*1000) > dateCheck){
        dateCheck = new Date(key*1000);
        newest = something.friends_count[key];
    }
}

console.log(newest);

http://jsfiddle.net/w4dsk4m3/

【讨论】:

    猜你喜欢
    • 2019-07-18
    • 2021-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-09-22
    • 2020-09-30
    • 2019-05-13
    • 1970-01-01
    • 2015-02-07
    相关资源
    最近更新 更多