如何在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, 0, 0, 0)).getTime()];
任何人都可以看到这个解决方案存在任何陷阱,或者有任何改进建议吗?
答案 0 :(得分:5)
为什么不使用日期的ISO8601表示,所以键就像20110426
。创建日期对象似乎效率低下。
它也可以使调试更容易,因为属性名称更易于阅读,即使你也添加了hhmmss。
答案 1 :(得分:2)
我看到的唯一问题是,如果你突然需要拥有相同日期的多个事件,这是非常有限的。否则它应该没问题。
另外:今天是5月23日,而不是4月26日:)
答案 2 :(得分:0)
我有一个类似的问题,我的解决方案可以帮助其他人。
我有一个“条目”列表,每个条目都有一个时间戳和一个值。 我想把它们分成“桶”,每天一个。 在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 }