在以下代码段中,hour: +date.getHours()将引发错误ReferenceError: date is not defined

    data = d.Data.slice(0, ncandles).map(function(d) {
        return {
            date: new Date(d.time * 1000),
            hour: date.getHours(), //date is not defined
            open: +d.open,
            high: +d.high,
            low: +d.low,
            close: +d.close,
            volume: +d.volume
        };
    }).sort(function(a, b) { return d3.ascending(accessor.d(a), accessor.d(b)); });


到目前为止,我唯一能够获得小时的方法是通过用hour: new Date(d.time * 1000).getHours()行创建一个新对象,如下所示。当已经创建了一个新对象时,似乎是多余且效率低下的。如何处理此范围内的date中的数据?

data = d.Data.slice(0, ncandles).map(function(d) {
    return {
        date: new Date(d.time * 1000),
        hour: new Date(d.time * 1000).getHours(),
        open: +d.open,
        high: +d.high,
        low: +d.low,
        close: +d.close,
        volume: +d.volume
    };
}).sort(function(a, b) { return d3.ascending(accessor.d(a), accessor.d(b)); });

最佳答案

data = d.Data.slice(0, ncandles).map(function(d) {
    let date = new Date(d.time * 1000)
    return {
        date: date,
        hour: date.getHours(),
        open: +d.open,
        high: +d.high,
        low: +d.low,
        close: +d.close,
        volume: +d.volume
    };
}).sort(function(a, b) { return d3.ascending(accessor.d(a), accessor.d(b)); });


其他方式

data = d.Data.slice(0, ncandles)
  .map(function(d) {
    let obj = {
      date: new Date(d.time * 1000),
      open: +d.open,
      high: +d.high,
      low: +d.low,
      close: +d.close,
      volume: +d.volume,
    }
    obj.hour = obj.date.getHours()
    return obj
  })
  .sort(function(a, b) {
    return d3.ascending(accessor.d(a), accessor.d(b))
  })

09-17 08:36