微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用日期作为哈希表键

如何解决使用日期作为哈希表键

| 如何在JavaSript中创建哈希表对象并将日期用作键?到目前为止,我已经知道了:
var eventHash = {};
for (var i = 0,l = events.length; i < l; i += 1) {
    eventHash[events[i].date.getTime()] = events[i];
}
然后,当我想查找与今天相关的事件时,可以使用以下方法
var event = eventHash[(new Date(2011,04,26,0)).getTime()];
谁能看到此解决方案的任何陷阱,或有任何改进建议?     

解决方法

您为什么不只使用日期的ISO8601表示形式,所以密钥就像
20110426
。创建日期对象似乎效率低下。 即使还添加了hhmmss,也可以使调试更容易,因为属性名称更易于阅读。     ,我看到的唯一问题是,如果您突然需要在同一日期进行多个事件,那将是一个很大的限制。否则应该没问题。 另外:今天是5月23日,而不是4月26日:)     ,我有一个类似的问题,我的解决方案可能会帮助其他人。 我有一个“条目”列表,每个条目都有一个时间戳和一个值。 我想将它们分成“桶”,每天一桶。 在Python中,我会使用collections.defaultdict,但是由于JavaScript没有类似的功能,所以请执行以下操作。 如果要读取键,请记住,当使用Date作为对象键时,它将转换为字符串。
var get_entries = function() {
    var entries = [];
    entries.push({
        \'timestamp\': 1381831606,\'value\': 3
    });
    entries.push({
        \'timestamp\': 1381831406,\'value\': 2
    });
    entries.push({
        \'timestamp\': 1381531606,\'value\': 6
    });
    entries.push({
        \'timestamp\': 1381221606,\'value\': 9
    });
    entries.push({
        \'timestamp\': 1381221601,\'value\': 8
    });
    entries.push({
        \'timestamp\': 1381221656,\'value\': 7
    });
    return entries;
};

var normalize_date = function(timestamp) {
    // JavaScript timestamps work with milliseconds.
    var dt = new Date(timestamp * 1000);
    return new Date(
        dt.getFullYear(),dt.getMonth(),dt.getDate()
    );
};

var prepare_data = function() {
    var entry,line = {};
    var entries_raw = get_entries();
    for (var i = 0; i < entries_raw.length; i++) {
        entry = entries_raw[i];
        entry.date = normalize_date(entries_raw[i].timestamp);
        // If date not exists in line,create it.
        console.log(\'Found entry for date\',entry.date,\'with value\',entry.value);
        if (typeof(line[entry.date]) === \'undefined\'){
           line[entry.date] = 0;
        }
        line[entry.date] += entry.value;
    }
    console.log(line);
    return line;
};

prepare_data();
输出:
$ nodejs diaryindex.js
Found entry for date Tue Oct 15 2013 00:00:00 GMT+0200 (CEST) with value 3
Found entry for date Tue Oct 15 2013 00:00:00 GMT+0200 (CEST) with value 2
Found entry for date Sat Oct 12 2013 00:00:00 GMT+0200 (CEST) with value 6
Found entry for date Tue Oct 08 2013 00:00:00 GMT+0200 (CEST) with value 9
Found entry for date Tue Oct 08 2013 00:00:00 GMT+0200 (CEST) with value 8
Found entry for date Tue Oct 08 2013 00:00:00 GMT+0200 (CEST) with value 7
{ \'Tue Oct 15 2013 00:00:00 GMT+0200 (CEST)\': 5,\'Sat Oct 12 2013 00:00:00 GMT+0200 (CEST)\': 6,\'Tue Oct 08 2013 00:00:00 GMT+0200 (CEST)\': 24 }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。