【问题标题】:Convert array of timestamps with Date javascript使用 Date javascript 转换时间戳数组
【发布时间】:2019-11-15 01:50:47
【问题描述】:

我有一个时间戳数组,我想将其转换为日期。

timestamps = [1568666854141, 1568595225048, 1568594645595];
timestamps.forEach(function(d) { d = new Date(d) } )

当我在调试中执行new Date(d) 时,它给了我Mon Sep 16 2019 16:47:34 GMT-0400,这很好,但如果我检查我的数组,它仍然是一样的。它给了我 [1568666854141, 1568595225048, 1568594645595] 而不是 [Mon Sep 16 2019 16:47:34 GMT-0400, ...] 为什么不是每个元素 d 都重新分配给一个日期?

【问题讨论】:

  • 你只是重新分配变量d,它对原始数组没有影响,你应该这样做timestamps.forEach(function(d, i) { timestamps[i] = new Date(d) } )

标签: javascript arrays date foreach timestamp


【解决方案1】:

您正在创建一个新数组并为每个元素创建一个新的(正确的)日期值,但不对这些值做任何事情。

timestamps = timestamps.map(function(d) { return new Date(d) } );

【讨论】:

    【解决方案2】:

    forEach不能修改orgin数组,请使用map:

    let timestamps = [1568666854141, 1568595225048, 1568594645595];
    timestamps = timestamps.map(function(d) { return new Date(d) } )
    

    【讨论】:

    • map 也不修改原始数组。 ;-) forEach 可以使用,虽然 map 更具语义性。
    【解决方案3】:

    我这样做解决了我的问题:

    timestamps.forEach(function(elem, idx, arr) {arr[idx] = new Date(elem); });

    【讨论】:

    • 您应该使用 map 代替(请参阅我的答案以及其他答案);特别是如果您不需要访问该数组以获取所有其他值。
    • mapforEach 否则行为非常相似;但这是一个重要的案例,您可以真正受益于map 返回一个数组为您。 (请查看下面我的答案中的链接,以获取更多详细信息。)
    猜你喜欢
    • 2016-04-03
    • 2016-11-27
    • 2012-12-14
    • 2018-11-28
    • 2021-03-05
    • 2014-12-10
    • 2011-07-21
    • 2014-02-13
    • 2013-07-20
    相关资源
    最近更新 更多