我可以在返回新对象之前从新对象获取数据吗?

时间:2018-06-25 09:38:49

标签: javascript

在以下代码段中,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)); });

1 个答案:

答案 0 :(得分:2)

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))
  })