首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在javascript中对对象数组中的值求和

如何在javascript中对对象数组中的值求和
EN

Stack Overflow用户
提问于 2019-06-18 19:24:22
回答 5查看 345关注 0票数 1

我有一个对象数组,如下所示:

代码语言:javascript
复制
[
    {
        Daypart: "G_POSTPEAK",
        day_of_week: "Monday",
        uplift: 1
    },
    {
        Daypart: "A_BREAKFAST",
        day_of_week: "Thursday",
        uplift: 1
    },
    {
        Daypart: "C_DAYTIME",
        day_of_week: "Sunday",
        uplift: 2
    },
    {
        Daypart: "G_POSTPEAK",
        day_of_week: "Monday",
        uplift: 2
    },
]

我只展示了数组中的一个对象样本,我正在处理更多的对象。它们都具有指定的属性,daypart属性可以是8个值中的一个,而星期的值可以是7(一周中的几天)中的一个。

我想返回具有相同daypart和day_of_week值的所有对象的提升值的总和。

因此,上面的代码应该返回如下内容:

代码语言:javascript
复制
{
    G_POSTPEAK_Monday: {
        Daypart: "G_POSTPEAK",
        day_of_week: "Monday",
        uplift: 3
    },
    A_BREAKFAST_Thursday: {
        Daypart: "A_BREAKFAST",
        day_of_week: "Thursday",
        uplift: 1
    },

    C_DAYTIME_Sunday: {
        Daypart: "C_DAYTIME",
        day_of_week: "Sunday",
        uplift: 2
    }
}

感谢任何帮助

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-06-18 19:34:31

可以使用以下函数。我用过ES6。该函数以inputs作为输入对象。

代码语言:javascript
复制
const sumIt = (inputs) => {
  const result = {};
  inputs.forEach((input) => {
    const key = `${input.Daypart}_${input.day_of_week}`;
    if (key in result) {
      result[key].uplift = result[key].uplift + input.uplift;
    } else {
      result[key] = { ...input };
    }
  });
  return result;
};

票数 1
EN

Stack Overflow用户

发布于 2019-06-18 19:38:34

您可以使用ES6 reduce函数在一行中执行求和,而不是使用foreach。

代码语言:javascript
复制
let array = [
    {
        Daypart: "G_POSTPEAK",
        day_of_week: "Monday",
        uplift: 1
    },
    {
        Daypart: "A_BREAKFAST",
        day_of_week: "Thursday",
        uplift: 1
    },
    {
        Daypart: "C_DAYTIME",
        day_of_week: "Sunday",
        uplift: 2
    },
    {
        Daypart: "G_POSTPEAK",
        day_of_week: "Monday",
        uplift: 2
    },
];

const totalUplift = array.reduce((acc, array) => acc + array.uplift, 0);

console.log(totalUplift);

票数 0
EN

Stack Overflow用户

发布于 2019-06-18 19:53:45

可以使用array#reduce根据对象累加器中的Daypartday_of_week对数据进行分组。

代码语言:javascript
复制
let data = [ { Daypart: "G_POSTPEAK", day_of_week: "Monday", uplift: 1 }, { Daypart: "A_BREAKFAST", day_of_week: "Thursday", uplift: 1 }, { Daypart: "C_DAYTIME", day_of_week: "Sunday", uplift: 2 }, { Daypart: "G_POSTPEAK", day_of_week: "Monday", uplift: 2 }],
    result = data.reduce((r,o) => {
      let key = `${o.Daypart}_${o.day_of_week}`;
      r[key] = r[key] || {...o, uplift: 0};
      r[key].uplift += o.uplift;
      return r;
    },{});
console.log(result);
代码语言:javascript
复制
.as-console-wrapper {max-height: 100% !important; top: 0;}

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

https://stackoverflow.com/questions/56648029

复制
相关文章

相似问题

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