根据日期和星期几对数据进行有效分组

时间:2017-02-13 18:23:15

标签: javascript

给出按日期降序排序的项目列表(索引0处的最近日期)。请注意,我们可能没有所有日期的数据。

[
  {price: 10, dt: "2017-02-13"},
  {price: 25, dt: "2017-02-05"},
  {price: 15, dt: "2017-01-15"},
   ...
   ..
]

我正在尝试将这些数据分组为几周,我可以使用“while”循环成功完成。

请参阅Plnkr此处

我目前无法使用像_.groupBy()那样的结构,因为分组条款不断移动..(我们必须根据周和一周进行分组,可以是Mn-Sun或Tues-Mn等)< / p>

对此有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:0)

此代码将创建表示每周的数组:

const data = [
    { price: 10, dt: "2017-02-13" },
    { price: 10, dt: "2017-02-12" },
    { price: 10, dt: "2017-02-11" },
    { price: 25, dt: "2017-02-05" },
    { price: 15, dt: "2017-01-15" }
]

const group = (data) => {
    let date = new Date(data[0].dt)
    date.setTime -= date.getDay() * 24 * 60 * 60 * 1000
    let grup = []
    let newData = []
    for (let i in data) {
        const dif = Math.floor(((date - new Date(data[i].dt)) / 24 / 1000 / 60 / 60) / 7)
        if (newData[dif]) {
            newData[dif].push(data[i])
        } else {
            newData[dif] = [data[i]]
        }
    }
    data.push(grup)
    return newData
}

console.log(group(data))

请注意,如果未找到周数据的数据将是未定义的