arrays - Angular flat data to object array
问题描述
I've looked at several examples, but I just don't get it. I have a flat dataset that I want to convert into a nested structure in typescript.I understand/believe I'll need to use .map and .forEach, but I just am at a loss of how to do it.
I have data like this:
origData = [
{name: 'Grass', value: 'bulbasaur-0', viewValue: 'Bulbasaur'},
{name: 'Grass', value: 'oddish-1', viewValue: 'Oddish'},
{name: 'Grass', value: 'bellsprout-2', viewValue: 'Bellsprout'},
{name: 'Water', value: 'squirtle-3', viewValue: 'Squirtle'},
{name: 'Water', value: 'psyduck-4', viewValue: 'Psyduck'},
{name: 'Water', value: 'horsea-5', viewValue: 'Horsea'},
{name: 'Fire', value: 'charmander-6', viewValue: 'Charmander'},
{name: 'Fire', value: 'vulpix-7', viewValue: 'Vulpix'},
{name: 'Fire', value: 'flareon-8', viewValue: 'Flareon'},
{name: 'Psychic', value: 'mew-9', viewValue: 'Mew'},
{name: 'Psychic', value: 'mewtwo-10', viewValue: 'Mewtwo'},
];
and I want it to look like:
pokemonGroups: PokemonGroup[] = [
{
name: 'Grass',
pokemon: [
{value: 'bulbasaur-0', viewValue: 'Bulbasaur'},
{value: 'oddish-1', viewValue: 'Oddish'},
{value: 'bellsprout-2', viewValue: 'Bellsprout'}
]
},
{
name: 'Water',
pokemon: [
{value: 'squirtle-3', viewValue: 'Squirtle'},
{value: 'psyduck-4', viewValue: 'Psyduck'},
{value: 'horsea-5', viewValue: 'Horsea'}
]
},
{
name: 'Fire',
disabled: true,
pokemon: [
{value: 'charmander-6', viewValue: 'Charmander'},
{value: 'vulpix-7', viewValue: 'Vulpix'},
{value: 'flareon-8', viewValue: 'Flareon'}
]
},
{
name: 'Psychic',
pokemon: [
{value: 'mew-9', viewValue: 'Mew'},
{value: 'mewtwo-10', viewValue: 'Mewtwo'},
]
}
];
解决方案
如果您使用诸如Underscore之类的实用程序库,这将容易得多。
import * as _ from "underscore";
let groups1 = _.groupBy(origData, (p) => p.name);
let pokemonGroups = Object.keys(groups1).map((type) =>
({ name: type, pokemon: groups1[type].map(({name, ...rest}) => rest) }));
推荐阅读
- mysql - Mysql:从二进制 ip 和子网获取 IPv6 二进制网络掩码
- node.js - grpc 的 gitlab-ci 构建失败
- c++ - 向量的时间复杂度有什么区别
a {N, 0} 和 int arr a[N] = {0} - python - 使用 R 进行大面板数据回归
- asp.net - 信箱不可用。服务器响应是:bosauthsmtp05:主机 117.58.242.18:不允许未经身份验证的中继
- reactjs - React Native AsyncStorage 无法解决
- swift - Swift 中具有返回类型的可选函数
- javascript - 如何将 botton 放在表格旁边的行数据 html 引导程序
- python - Flask - 提交按钮值
- javascript - 如何在 HTML 字符串段中使用 Javascript 变量