首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过外部对象的值减少嵌套对象的数组

通过外部对象的值减少嵌套对象的数组
EN

Stack Overflow用户
提问于 2020-07-26 11:45:19
回答 5查看 65关注 0票数 0

我有如下数组:

代码语言:javascript
复制
  const myArray = [
    {
      name: 'banana',
      quotas: [
        {
          title: 'innerBanana1',
          percent: 0.3
        },
        {
          title: 'innerBanana2',
          percent: 0.4
        }
      ]
    },
    {
      name: 'apple',
      quotas: [
        {
          title: 'innerApple1',
          percent: 0.6
        },
        {
          title: 'innerApple2',
          percent: 0.2
        }
      ]
    }
  ]

只有当配额数组中的百分比属于同一个外部对象(又名:名称相同)时,我才想将它们相加。

预期结果

代码语言:javascript
复制
finalArray = [
  { name: 'banana', percent: 0.7 },
  { name: 'apple', percent: 0.8 }
]

我试过

代码语言:javascript
复制
  const sum = quotaGroups
    .map(quotaGroup => quotaGroup.quotas)
    .reduce((accumulator, groupedQuota) => {
      return accumulator + groupedQuota[0].percent
    })

但这显然是行不通的。如果内部对象的quotas是相同的,那么我忽略了关于如何只对其进行求和的链接。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2020-07-26 11:51:40

您需要在映射中进行减缩,否则名称会丢失,而累加器试图连接字符串,而不是总计一个数字。

代码语言:javascript
复制
const myArray = [
  {
    name: 'banana',
    quotas: [{title: 'innerBanana1', percent: 0.3}, {title: 'innerBanana2', percent: 0.4}]
  }, 
  {
    name: 'apple',
    quotas: [{title: 'innerApple1', percent: 0.6}, {title: 'innerApple2', percent: 0.2}]
  }
]

const sum = myArray
  .map(quotaGroup => ({
    name: quotaGroup.name,
    percent: quotaGroup.quotas.reduce((acc, item) => acc + item.percent, 0)
  }))

console.log(sum)

票数 1
EN

Stack Overflow用户

发布于 2020-07-26 11:52:40

使用mapreduce

代码语言:javascript
复制
const sum = (arr) =>
  arr.map(({ quotas, name }) => ({
    name,
    percent: quotas.reduce((sum, { percent }) => sum + percent, 0),
  }));
  
const myArray = [
  {
    name: "banana",
    quotas: [
      {
        title: "innerBanana1",
        percent: 0.3,
      },
      {
        title: "innerBanana2",
        percent: 0.4,
      },
    ],
  },
  {
    name: "apple",
    quotas: [
      {
        title: "innerApple1",
        percent: 0.6,
      },
      {
        title: "innerApple2",
        percent: 0.2,
      },
    ],
  },
];



console.log(sum(myArray));

票数 1
EN

Stack Overflow用户

发布于 2020-07-26 11:52:38

这是你想要的:

代码语言:javascript
复制
const myArray = [
    {
        name: 'banana',
        quotas: [
            {
                title: 'innerBanana1',
                percent: 0.3
            },
            {
                title: 'innerBanana2',
                percent: 0.4
            }
        ]
    },
    {
        name: 'apple',
        quotas: [
            {
                title: 'innerApple1',
                percent: 0.6
            },
            {
                title: 'innerApple2',
                percent: 0.2
            }
        ]
    }
];

console.log(myArray.map(({ name, quotas }) => {
    return { name, percent: quotas.reduce((a, { percent }) => a + percent, 0) }
}));

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

https://stackoverflow.com/questions/63099699

复制
相关文章

相似问题

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