如何提取JSON对象中所有地区数组并合并为单一列表?
问题原因及解决方案
你用map处理后得到的是数组的数组,而非单一列表——因为每个国家的Regions本身就是数组,map只是把这些数组原封不动地收集到新数组里,比如示例数据会生成这样的结构:
[ ["Adélie Land", "Argentine Antarctica", ...], [], ["Buenos Aires", "Cordoba", ...] ]
要把嵌套数组合并成单层列表,有几种简单的解决方法:
方法1:使用flatMap(推荐,一步到位)
flatMap相当于先执行map再对结果做一层扁平化,直接返回合并后的单层数组:
this.service.getData().subscribe((data: any) => { this.list = data.flatMap((c: any) => c.Regions); });
方法2:map + flat
如果是旧环境不支持flatMap,可以先用map提取所有Regions数组,再用flat()扁平化:
this.service.getData().subscribe((data: any) => { this.list = data.map((c: any) => c.Regions).flat(); });
注:
flat()默认只扁平化一层嵌套,正好匹配你的场景;如果有更深层级嵌套,可以传入参数(比如flat(2))。
方法3:使用reduce手动合并
通过reduce累加数组,把每个Regions合并到初始空数组中:
this.service.getData().subscribe((data: any) => { this.list = data.reduce((acc, curr) => acc.concat(curr.Regions), []); });
内容的提问来源于stack exchange,提问作者user19329953
相关产品推荐
相关产品推荐

