首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取嵌套对象的聚合大小

获取嵌套对象的聚合大小
EN

Stack Overflow用户
提问于 2020-01-29 18:31:42
回答 1查看 53关注 0票数 0

我有以下JS对象:

代码语言:javascript
复制
[
  {
    title: "cat1",
    children: [
      {
        title: "Monday",
        children: [
          { title: "size1", size: 120 },
          { title: "size2", size: 75 },
          { title: "size3", size: 45 }
        ]
      },
      {
        title: "Tuesday",
        children: [
          { title: "size1", size: 105 },
          { title: "size2", size: 45 },
          { title: "size3", size: 75 }
        ]
      }
    ]
  },
  {
    title: "cat2",
    children: [
      {
        title: "Monday",
        children: [
          { title: "size1", size: 60 },
          { title: "size2", size: 40 }
        ]
      }
    ]
  }
];

并且想要评估每个巢的大小的聚合体。说我会得到

代码语言:javascript
复制
[
  {
    title: "cat1",
    size: 465,
    children: [
      {
        title: "Monday",
        size: 240
      },
      {
        title: "Tuesday",
        size: 225
      }
    ]
  },
  {
    title: "cat2",
    size: 200,
    children: [
      {
        title: "Monday",
        size: 200
      }
    ]
  }
];

到目前为止,我有以下代码,但是如果嵌套是两个或更多,它就不能工作。我猜这是因为与“按引用调用”相关的原因,但不确定如何修复它。有谁能帮我一下吗?

代码语言:javascript
复制
const getFrequency = (item: any) => {
    console.log(item);
    if (item[0].children[0].children === undefined) {
      item.map((item2: any) => ({
        title: item2.title,
        size: item2.children.reduce((prev: number, curr: any) => prev + curr.size, 0)
      }));
    } else {
      item.map((item2: any) => ({
        title: item2.title,
        children: item2.children,
        size: getFrequency(item2.children)
      }));
    }
    return item;
  };

const freqData = getFrequency(nestedData);

编辑:它必须能够递归处理具有两个以上嵌套的数据。

EN

Stack Overflow用户

发布于 2020-01-29 18:39:35

代码语言:javascript
复制
const arr = [{
    title: "cat1",
    size: 465,
    children: [{
        title: "Monday",
        size: 240
      },
      {
        title: "Tuesday",
        size: 225
      }
    ]
  },
  {
    title: "cat2",
    size: 200,
    children: [{
      title: "Monday",
      size: 200
    }]
  }
];

arr.map(el => {
  const childSize = el.children.reduce((acc, item) => acc += item.size, 0);

  return { ...el,
    size: childSize
  }
});

console.log(arr)

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59965168

复制
相关文章

相似问题

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