提问者:小点点

移除JavaScript对象数组中的重复项并求和条目


我有一个具有两个属性的对象:xy,类型分别为String和number。

在Express.js应用程序中,使用Plotly将相应的(x,y)值用于绘制时间序列,x采用2013-10-04T22:23格式。

现在假设我有一个具有重复x值的对象,我需要移除重复项,只为该x值保留一个条目,并将相应的y值求和,同样只保留一个相应的y值。

例如:

var data = [
               {
                   x: ["2013-10-04 22:22", "2013-10-04 22:22", "2013-10-04 22:22", 
                       "2013-12-12 15:15"],
                   y: [1, 1, 1, 6]
               }
           ];

我要将2013-10-04 22:22x值的y值求和,只保留一个xy值对,如下所示:

data = [
           {
               x: ["2013-10-04 22:22", 
                   "2013-12-12 15:15"],
               y: [3, 6]
           }
       ];

一个人该怎么做呢?


共1个答案

匿名用户

您可以创建一个接收对象的函数,并以您想要的方式操作该对象:

const obj = {
  x: ["2013-10-04 22:22", "2013-10-04 22:22", "2013-10-04 22:22", "2013-12-12 15:15"],
  y: [1, 1, 1, 6]
}

function removeObjDuplicates ({ x, y }) {

  const occurrences = {};

  for (let i = 0; i < x.length; i++) {
      occurrences[x[i]] = (occurrences[x[i]] || 0) + y[i];
  }

  return {
    x:  Object.keys(occurrences),
    y:  Object.values(occurrences),
  }
}

removeObjDuplicates(obj)将返回:

{
   x: ["2013-10-04 22:22", "2013-12-12 15:15"],
   y: [3, 6]
}