首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按月分割数组

按月分割数组
EN

Stack Overflow用户
提问于 2018-05-26 00:51:33
回答 2查看 1.9K关注 0票数 0

我有一个json,其中只有当前年份的数据,日期是ISODATE格式,我如何,角度1按月分隔json对象,例如,将数据抛给另一个json,对应于变量日期上定义的月份。

我做了以下工作:

代码语言:javascript
复制
.then(function(resp) {
vm.acoesAno = resp.data
angular.forEach(vm.acoesAno, function(value, key){
    angular.forEach(vm.acoesAno, function(value, key){
        const date = new Date(value.data)
        const mes = date.getMonth()
        if (mes == 0){
            vm.jan = vm.acoesAno[key]
        } else if (mes == 1){
            vm.fev = vm.acoesAno[key]
        } else if (mes == 2){
            vm.mar = vm.acoesAno[key]
        } else if (mes == 3){
            vm.abr = vm.acoesAno[key]
        } else if (mes == 4){
            vm.mai = vm.acoesAno[key]
        } else if (mes == 5){
            vm.jun = vm.acoesAno[key]
        } else if (mes == 6){
            vm.jul = vm.acoesAno[key]
        } else if (mes == 7){
            vm.ago = vm.acoesAno[key]
        } else if (mes == 8){
            vm.set = vm.acoesAno[key]
        } else if (mes == 9){
            vm.out = vm.acoesAno[key]
        } else if (mes == 10){
            vm.nov = vm.acoesAno[key]
        } else if (mes == 11){
            vm.dez = vm.acoesAno[key]
        }
    })  
})  

console.log("mes de maio: ", vm.mai)}

json vm.acoesAno中有两个对象是在5月份注册的,但是在forEach外部的变量中,我只得到了1个对象,forEach中的变量存储了这两个对象。

JSON数据vm.acoesAno:

代码语言:javascript
复制
{
    data : "2018-05-06T03:00:00.000Z",
    longitude : "-52.018375",
    latitude : "-27.226520",
    dataCadastro : "2018-05-22T02:57:01.443Z"
}

但是在json中有几个日期不同的对象。

@vol7ron

console.log(grouped[4])

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-05-26 01:18:47

您可以使用Array.prototype.filter和regex匹配特定月份来筛选数据。

代码语言:javascript
复制
// if you want to make it efficient, you can do something

  .then(function(resp) {
    const data = resp.data;
    vm.jan = [];
    vm.fev = [];
    // initialize all arrays to empty array
    vm.acoesAno = data;
    data.forEach(item => {
       if (/(.*)-01-(.*)/.test(item.data)){
          vm.jan.push(item);
       } else if (/(.*)-02-(.*)/.test(item.data)){
         vm.fev.push(item);
       } else if (/(.*)-03-(.*)/.test(item.data)){
          vm.mar.push(item);
       }
      // and so on 
    });

// 2nd method

.then(function(resp) {
    const data = resp.data;
    vm.acoesAno = data;
    vm.jan = data.filter(item => /(.*)-01-(.*)/.test(item.data);
    vm.fev = data.filter(item => /(.*)-02-(.*)/.test(item.data);
    vm.mar = data.filter(item => /(.*)-03-(.*)/.test(item.data);
    vm.abr = data.filter(item => /(.*)-04-(.*)/.test(item.data);
    // and so on for all other months

});

票数 1
EN

Stack Overflow用户

发布于 2018-05-26 01:16:33

对角不太熟悉了,但是:

  • 您应该能够将对象传递给迭代器函数。
  • 您可能不需要使用月份名称作为键,只需使用它们的整数
  • 我不知道为什么在这种情况下使用两个循环--难道1就不够了吗?
  • 您只有一个值,因为您使用的是赋值(vm.mai = vm.acoesAno[key]),而不是添加到集合或数组中,这意味着您要在每次迭代中覆盖

代码语言:javascript
复制
.then(function(resp) {
  vm.acoesAno = resp.data
  let grouped = {}
  angular.forEach(vm.acoesAno, function(value, key, obj) {
    const date = new Date(value.data)
    const mes = date.getMonth()
    if (typeof grouped[+mes] == 'undefined')
      grouped[+mes]=[]

    grouped[+mes].push(obj);
  })

  console.log("mes de maio: ", grouped[4])
})
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50538393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档