javascript - 将数据减少到嵌套类别
问题描述
我正在尝试将一组数据减少为嵌套对象。除了下一个项目,我几乎拥有它。它不是推入数组,而是覆盖整个数组本身,只留下 1 个值。
我 100% 确定问题出在这行代码上,[...(acc[t.sub_region] || []), t]
我的直觉告诉我我需要做一些事情,[...(acc[t.region][t.sub_region] || []), t]
但是当我尝试这个时它会出错。
我在下面发布了一个片段,您可以看到 SOUTH_EUROPE 在它的数组中只有 1 个项目,而它应该有 2 个。
期望的结果
const sorted = {
EUROPE: {
SOUTH_EUROPE: [{ item: 'Item 1' }, { item: 'Item 2' }],
NORTH_EUROPE: [{ item: 'Item 3' }],
},
AMERICAS: {
NORTH_AMERICA: [{ item: 'Item 4' }],
},
}
const items = [
{
region: 'EUROPE',
sub_region: 'SOUTH_EUROPE',
item: 'Item 1'
},
{
region: 'EUROPE',
sub_region: 'SOUTH_EUROPE',
item: 'Item 2'
},
{
region: 'EUROPE',
sub_region: 'NORTH_EUROPE',
item: 'Item 3'
},
{
region: 'AMERICAS',
sub_region: 'NORTH_AMERCA',
item: 'Item 4'
},
]
const sorted = items.reduce((acc, t) => {
return {
...acc,
[t.region]: {
...acc[t.region],
[t.sub_region]: [...(acc[t.sub_region] || []), t],
},
}
}, {})
console.log(sorted)
解决方案
sub_region
是一个嵌套属性,所以你需要使用acc?.[t.region]?.[t.sub_region]
它来访问它。请注意,可选链接运算符用于防止在该区域尚不存在时引发错误。
const items = [
{
region: 'EUROPE',
sub_region: 'SOUTH_EUROPE',
item: 'Item 1'
},
{
region: 'EUROPE',
sub_region: 'SOUTH_EUROPE',
item: 'Item 2'
},
{
region: 'EUROPE',
sub_region: 'NORTH_EUROPE',
item: 'Item 3'
},
{
region: 'AMERICAS',
sub_region: 'NORTH_AMERCA',
item: 'Item 4'
},
]
const sorted = items.reduce((acc, t) => {
return {
...acc,
[t.region]: {
...acc[t.region],
[t.sub_region]: [...(acc?.[t.region]?.[t.sub_region] || []),
{item: t.item}],
},
}
}, {})
console.log(sorted)
推荐阅读
- java - Firebase Auth,在验证手机身份验证时崩溃,android
- android - 如何在扩展函数中获取 Dagger2 类属性?
- java - 启动我的 Tomcat 服务器时出现 Beans 实例化错误。失败的 Bean 指的是一个 Repository 类,它是一个接口
- javascript - 为什么我得到'无法读取属性'addEventListener'的null
- python - 初学者 - Python .sort() 中的 TypeError
- node.js - 你如何使用 Tailwind.css 构建 npm?
- sql - SQL-性能问题
- typescript - 如果我使用 for 循环确定返回值,如何从该函数返回值?
- vba - MS Access 表单上的条件可见性 - 如何用 VBA 或宏编写
- android - 安装导航组件后Android构建失败