【问题标题】:Group array by year按年份分组数组
【发布时间】:2017-05-16 19:43:35
【问题描述】:

我正在使用 REST API,它为我提供了一组包含在数组中的数据。日期是字符串。

以下是数据的样子:

arr = [
    "2015-07-31",
    "2015-08-31",
    "2015-09-30",
    "2015-10-31",
    "2015-11-30",
    "2015-12-31",
    "2016-01-31",
    "2016-02-29",
    "2016-03-31",
    "2016-04-30",
    "2016-05-31",
    "2016-06-30",
    // MORE ITEMS...
]

我将如何实现按年份对这个数组进行分组(例如 2015 年:7 月、8 月、9 月等。2016 年:1 月、2 月、3 月等)。

自定义管道会有帮助吗?在控制器而不是服务中进行分组是否更好?

【问题讨论】:

  • 你期待什么样的结果?一个数组数组?,像{"2015":[..], "2016":[...]}这样的对象?
  • 类似 {'2015': [], "2016":[]} 等

标签: arrays typescript


【解决方案1】:

在我看来,最好直接在服务中进行。 所以在你的服务中你可以有一个私有方法toGroupedYears(arrayOfDates),然后你可以通过 rxjs 操作符映射来做这样的事情:

//myservice.ts
import 'rxjs/add/operator/map'
...
public getDates(){
  this.http.get(`${this.url}/dates`)
    .map( (dates) => this.toGroupedDates(dates.json()))
}
...

toGroupedDates 方法中,你可以有这样的东西:

private toGroupedDates(array){
  // Extract year from arr
  let extractedYear = array.map((date) => {
    return date.split('-')[0];
  });

  // Get just the year list
  let yearsArray = new Set(extractedYear);


  // Group by year
  let filteredByYears = [];
  yearsArray.forEach((year) => {
    filteredByYears.push({ [year] : array.filter((_year) => {
      return _year.split('-')[0] == year; 
    })});
  });
  
  return filteredByYears;
}

希望对你有帮助:)

【讨论】:

  • arr.filter 应该是从哪里来的? arr 似乎没有在任何地方定义
  • 这看起来不错,但现在我得到了年份:[...]。我怎么能也提取年份(所以我以 2016 年结束:[..]、2015 年:[...] 等)
  • 是的,这只是一个简单的例子,说明如何做到这一点。你想要什么输出?
  • 类似 {'2015': [], "2016":[]} 等应该没问题!非常感谢
  • 好的,我编辑了我的答案,你只需要在键 year 周围添加括号,它就会接受变量。
【解决方案2】:

我给你写一个例子 希望对你有帮助

  yearsGroup: any = {};
  groupByYear(arry: Array<string>) {
    arry.forEach((value) => {
      let date = new Date(value);
      let year = date.getFullYear();
      if (this.yearsGroup[year]) {
        this.yearsGroup[year].push(value);
      } else {
        this.yearsGroup[year] = [];
        this.yearsGroup[year].push(value);
      }
    });

  }

结果:

{
  2015:[...],
  2016:[...]
}

【讨论】:

    猜你喜欢
    • 2020-04-22
    • 1970-01-01
    • 2017-11-04
    • 2017-11-05
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多