javascript - 获取嵌套对象的总大小
问题描述
我有以下 JS 对象:
[
{
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 }
]
}
]
}
];
并想评估每个巢中大小的总和。说我会得到
[
{
title: "cat1",
size: 465,
children: [
{
title: "Monday",
size: 240
},
{
title: "Tuesday",
size: 225
}
]
},
{
title: "cat2",
size: 200,
children: [
{
title: "Monday",
size: 200
}
]
}
];
到目前为止,我有以下代码,但如果嵌套是两个或更多,它就不起作用。我想这是因为与“引用调用”相关的东西,但不知道如何解决它。有人可以帮我吗?
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);
编辑:它必须能够递归处理具有两个以上嵌套的数据。
解决方案
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)
推荐阅读
- asp.net-core - 如何使用多个存储库对控制器进行 NUnit 测试
- windows - 桌面快捷方式可将新的 chrome 网页作为新选项卡打开
- ios - 如何通过点击两个不同的区域来隐藏视图的子视图(浮动操作按钮)
- python - 多进程生成器方法仅对每个进程工作一次
- configuration - 如何从 github 配置系统
- github - 在 Kaggle 中下载文件会出现“失败:名称解析暂时失败”错误
- seo - CSS有效性会影响SEO吗?
- python - 如何从烧瓶应用程序获取请求 url?
- python - 为什么 tcpdump 比 python 实现快这么多?
- python - 如何在 FlaskForm 内的多个字段上创建 UniqueValidator