为了账号安全,请及时绑定邮箱和手机立即绑定

基于 JSON api 响应构建数组

基于 JSON api 响应构建数组

不负相思意 2022-06-16 16:26:49
下面是来自 angularjs 中 api 的 JSON 响应,{"counts": [  [    {      "xcount": 0.0,      "ycount": 0.0,      "month": 4    },    {      "xcount": 0.0,      "ycount": 0.0,      "month": 5    },    {      "xcount": 0.0,      "ycount": 2.85,      "month": 6    },    {      "xcount": 8.85,      "ycount": 0.0,      "month": 6    },    {      "xcount": 10.17,      "ycount": 0.0,      "month": 7    },    {      "xcount": 0.0,      "ycount": 2.85,      "month": 7    },    {      "xcount": 12.0,      "ycount": 0.0,      "month": 8    },    {      "xcount": 0.0,      "ycount": 2.85,      "month": 8    },    {      "xcount": 0.0,      "ycount": 2.85,      "month": 9    },    {      "xcount": 11.0,      "ycount": 0.0,      "month": 9    }  ]]}根据我的要求,我希望得到如下响应{"counts": [  [    {      "xcount": 0.0,      "ycount": 0.0,      "month": 4    },    {      "xcount": 0.0,      "ycount": 0.0,      "month": 5    },    {      "xcount": 8.85,      "ycount": 2.85,      "month": 6    },    {      "xcount": 10.17,      "ycount": 2.85,      "month": 7    },    {      "xcount": 12.0,      "ycount": 2.85,      "month": 8    },    {      "xcount": 11.0,      "ycount": 2.85,      "month": 9    }  ]]}
查看完整描述

2 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

var arr = {

  "counts": [

    [{

        "xcount": 0.0,

        "ycount": 0.0,

        "month": 4


      },

      {

        "xcount": 0.0,

        "ycount": 0.0,

        "month": 5


      },

      {

        "xcount": 0.0,

        "ycount": 2.85,

        "month": 6

      },

      {

        "xcount": 8.85,

        "ycount": 0.0,

        "month": 6

      },

      {

        "xcount": 10.17,

        "ycount": 0.0,

        "month": 7

      },

      {

        "xcount": 0.0,

        "ycount": 2.85,

        "month": 7

      },

      {

        "xcount": 12.0,

        "ycount": 0.0,

        "month": 8

      },

      {

        "xcount": 0.0,

        "ycount": 2.85,

        "month": 8

      },

      {

        "xcount": 0.0,

        "ycount": 2.85,

        "month": 9

      },

      {

        "xcount": 11.0,

        "ycount": 0.0,

        "month": 9

      }

    ]

  ]

}


arr.counts[0] = arr.counts[0].reduce((acc, cv, i, arr) => {

  if (!acc[cv.month]) {

    acc[cv.month] = cv;

  } else {

    acc[cv.month].xcount += cv.xcount

    acc[cv.month].ycount += cv.ycount

  }

  if (i === arr.length - 1) {

    return Object.keys(acc).map(key => acc[key])

  } else {

    return acc;

  }

}, {});


console.log(arr.counts[0]);


使用该reduce函数,我们使用月份号作为键创建一个临时对象。这使我们能够跟踪唯一条目。当我们找到一个重复的月份时,我们将xcountand加ycount在一起。一旦我们到达列表的末尾,我们就会返回映射到它们的值的临时对象的键。导致列表仅包含唯一月份。


查看完整回答
反对 回复 2022-06-16
?
慕森王

TA贡献1777条经验 获得超3个赞

正如我从您的问题中了解到的那样,要删除重复的月份,如果是这种情况,这是我上面的建议。


更新:了解您关于通过 xcount、ycount 组合的观点,并添加了必要的更改。


var arr = {

    "counts": [

      [

        {

          "month": 4,

          "xcount": 0,

          "ycount": 0

        },

        {

          "month": 5,

          "xcount": 0,

          "ycount": 0

        },

        {

          "month": 6,

          "xcount": 0,

          "ycount": 2.85

        },

        {

          "month": 6,

          "xcount": 8.85,

          "ycount": 0

        },

        {

          "month": 7,

          "xcount": 10.17,

          "ycount": 0

        },

        {

          "month": 7,

          "xcount": 0,

          "ycount": 2.85

        },

        {

          "month": 8,

          "xcount": 12,

          "ycount": 0

        },

        {

          "month": 8,

          "xcount": 0,

          "ycount": 2.85

        },

        {

          "month": 9,

          "xcount": 0,

          "ycount": 2.85

        },

        {

          "month": 9,

          "xcount": 11,

          "ycount": 0

        }

      ]

    ]

  };

  var tmpMonths = [];

  var tmpObjects = {};

  var results = [];

  for (var i=0;i<arr.counts[0].length;i++) {

      var obj = arr.counts[0][i];

      var key = "month_" + obj.month;

      if (obj.month && tmpMonths.indexOf(obj.month)===-1) {

          

          tmpMonths.push(obj.month);

          tmpObjects[key] = obj;

          results.push(obj);

      } else {

          tmpObjects[key] = {

              month: obj.month,

              xcount: obj.xcount + tmpObjects[key]["xcount"],

              ycount: obj.ycount + tmpObjects[key]["ycount"],

          };

      }

  }

  arr.counts[0] = Object.values(tmpObjects);

  console.log(JSON.stringify(arr));



查看完整回答
反对 回复 2022-06-16
  • 2 回答
  • 0 关注
  • 142 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信