javascript - 如何通过单线解决方案将包含对象数组的对象减少为内部对象?
问题描述
我有以下对象结构:
regions: [
{
name: reg1,
subregions: [
{name: subreg11},
{name: subreg12}
]
},
{
name: reg2,
subregions: [
{name: subreg21},
{name: subreg22}
]
}
]
我想要的是提取子区域的数组,如下所示:
[{name: subreg11}, {name: subreg12}, {name: subreg21}, {name: subreg22}]
...我想用一个单行 array.prototype-function 来做到这一点,比如 .filter、.map、.forEach 等。
我已经设法在这样的三行中做到了(包括我希望在单行中包含的返回语句):
let subregions = []
regions.forEach(reg => reg.subregions.forEach(subregion => subregions.push(subregion)))
return locs
有谁知道我该怎么做?
编辑 2020 年 7 月:我看到该问题已被@nina-sholz标记为重复,但我不相信这是真的。链接的问题是“ Why no Array.prototype.flatMap in javascript? ”,而我的问题是对解决问题方法的描述。我没有特别要求 flatMap 功能,并将其标记为重复只是说“您应该直观地知道那Array.prototype.flatMap
是您正在寻找的东西”。
解决方案
flatMap
并提取subregions
属性:
const regions = [
{
name: 'reg1',
subregions: [
{name: 'subreg11'},
{name: 'subreg12'}
]
},
{
name: 'reg2',
subregions: [
{name: 'subreg21'},
{name: 'subreg22'}
]
}
];
const output = regions.flatMap(({ subregions }) => subregions);
console.log(output);
您还可以使用reduce
:
const regions = [
{
name: 'reg1',
subregions: [
{name: 'subreg11'},
{name: 'subreg12'}
]
},
{
name: 'reg2',
subregions: [
{name: 'subreg21'},
{name: 'subreg22'}
]
}
];
const output = regions.reduce((a, { subregions }) => a.concat(subregions), []);
console.log(output);
几乎任何 Javascript 代码都可以简化为一行,但不一定是可读的。
推荐阅读
- webpack - 如何在 weback 配置中等待一段代码?
- azure - 使用 ARM 模板创建 Microsoft.Web/serverfarms 资源
- javascript - 如何删除椭圆之间的线连接?JS 画布
- php - PHP strtotime没有产生正确的日期
- android - 使用 EditText 在 RecyclerView 中搜索
- python - 保持 OrderedDict 的顺序
- string - 如何在 PostgreSQL 的同一列中拆分名称数据?
- asp.net-core - 将 Office Addins 项目的目标框架从 .NET Framework 更改为 .NET Core
- excel - 使用 Application.OnTime 时停止宏重复
- accessibility - Web/推送通知和可访问性