首页 文章

为每个唯一日期将数据的第一个值获取到数组中

提问于
浏览
1

下面是一个数据对象,如何使用 javascript 迭代这个对象,以便每个唯一日期将一个“值”字段放入一个数组中?

我知道如何获取所有数据但我需要为每个唯一日期获取一个(在这种情况下可以忽略时间)

{
  name: "test", 
  data: Array(200)
}

data: Array(200) 
0: {
  @id: "p23o"
  code: "02"
  dateTime: "2018-12-12T04:38:00Z"
  value: -0.645
}  
1: {
  @id: "p453o"
  code: "02"
  dateTime: "2018-12-12T07:48:00Z"
  value: -0.3645
} 
2: {
  @id: "p4423o"
  code: "032"
  dateTime: "2018-12-11T07:13:00Z"
  value: -0.645
} 
+ 198 more objects

该数组需要包含每天的一个值数据。如何通过并将这些数据整合到一个数组中?最佳做法或正确的方法是什么?

提前致谢!

2 回答

  • 1

    使用Datestring日期转换为Date对象,然后创建没有时间的日期。

    请遵循以下代码:

    // data will be the variable containing your response
    var uniqueData = {};
    data.forEach(item => {
       var date = new Date(item.dateTime);  
       var onlyDaysTime = new Date(date.getYear(), date.getMonth(), 
           date.getDate());
       var key = onlyDaysTime.toString();
    
       if(typeof uniqueData[key] === 'undefined') {
          uniqueData[key] = [];
       }
       uniqueData[key].push(item);
    })
    
    for(key in uniqueData) {
      console.log(uniqueData[key]);
    }
    

    输出:

    [[object Object] {
      code: "02",
      dateTime: "2018-12-12T04:38:00Z",
      id: "p23o",
      value: -0.645
    }, [object Object] {
      code: "02",
      dateTime: "2018-12-12T07:48:00Z",
      id: "p453o",
      value: -0.3645
    }]
    [[object Object] {
      code: "032",
      dateTime: "2018-12-11T07:13:00Z",
      id: "p4423o",
      value: -0.645
    }]
    

    工作小提琴: https://jsbin.com/juwekiduju/edit?JS,控制台

  • 0

    您可以使用array#reduce将对应于每个唯一日期的对象存储在对象累加器中,然后使用Object.values()从该对象获取所有值

    let data = [{ "@id": "p23o", code: "02", dateTime: "2018-12-12T04:38:00Z", value: -0.645 } , { "@id": "p453o", code: "02", dateTime: "2018-12-12T07:48:00Z", value: -0.3645 } , { "@id": "p4423o", code: "032", dateTime: "2018-12-11T07:13:00Z", value: -0.645 }],
        result = Object.values(data.reduce((r,o) => {
          let date = o.dateTime.substring(0,10);
          if(!(date in r)) r[date] = {...o};
          return r;
        },{}));
    console.log(result);
    

相关问题