Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用日期作为哈希表键_Javascript - Fatal编程技术网

Javascript 使用日期作为哈希表键

Javascript 使用日期作为哈希表键,javascript,Javascript,如何在JavaSript中创建哈希表对象并使用日期作为键?到目前为止,我得到了这个: var eventHash = {}; for (var i = 0, l = events.length; i < l; i += 1) { eventHash[events[i].date.getTime()] = events[i]; } 有人能看到这个解决方案有什么缺陷吗,或者有什么改进的建议吗?我看到的唯一问题是,如果突然需要在同一日期举办多个活动,那么它的局限性很大。否则应该没问题

如何在JavaSript中创建哈希表对象并使用日期作为键?到目前为止,我得到了这个:

var eventHash = {};
for (var i = 0, l = events.length; i < l; i += 1) {
    eventHash[events[i].date.getTime()] = events[i];
}

有人能看到这个解决方案有什么缺陷吗,或者有什么改进的建议吗?

我看到的唯一问题是,如果突然需要在同一日期举办多个活动,那么它的局限性很大。否则应该没问题


另外:今天是5月23日,而不是4月26日:)

为什么不使用ISO8601表示日期,所以键应该是
20110426
。创建日期对象似乎有点低效


这也会使调试变得更容易,因为属性名称更容易让人阅读,即使您还添加了hhmms。

我有一个类似的问题,我的解决方案可能会帮助其他人

我有一个“条目”列表,每个条目都有一个时间戳和一个值。 我想把它们分成“桶”,每天一个。 在Python中,我会使用collections.defaultdict,但由于JavaScript没有类似的内容,我会执行以下操作

如果要读取键,请记住,当使用日期作为对象键时,它会转换为字符串

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();

陷阱?你有多确定每天只有一次活动?陷阱?你怎么能确定事件恰好发生在午夜?这两个陷阱是什么:我只处理日期(所以h、m、s&m总是0'd out)和每天最多发生的事件。所以不能在同一天发生两个事件?即使您的需求允许您使用日期作为键,我想从长远来看,使用其他东西会更安全。(虽然,我承认,我不知道你在尝试做什么,键入日期也可能没问题。)@Jeremy yeah这是一个金融应用程序,我正在构建的eventHash是一个计划交易的例外列表。每个计划都有一个eventHash,事务最多每天重复一次,因此非常适合我的需要。JavaScript月份是基于0的,因此
04
=May。26是一个错误;)@马蒂:是的,那是我的错。:)
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 }