[英]Typescript : How to group an object of named list of objects by field name
我必须用这种美妙的语言 javascript 来操作数据。 在那之前,我设法自己实现了我所需要的,但我在那里达到了我的极限。
很难解释我的数据是如何构造的,所以让我们创建一个模式。 这就是我所拥有的:
obj: {[key: string]: {name: string, type: string}[]} =
{
"animals": [
{name: "Louis", type: "dog"},
{name: "John", type: "cat"},
{name: "Jordan", type: "dog"},
]
"cars" : [
{name: "alpha", type: "ferrari"},
{name: "beta", type: "ferrari"},
{name: "charlie", type: "mercedes"},
]
}
我试图实现的是对于每个 object,按类型对列表中的 object 进行分组。 这看起来像这样:
obj: {[key: string]: {[key: string]: {name: string, type: string}[]}} =
{
"animals": {
"dog": [
{name: "Louis", type: "dog"},
{name: "Jordan", type: "dog"},
],
"cat": [
{name: "John", type: "cat"},
]
}
"cars" : {
"ferrari": [
{name: "alpha", type: "ferrari"},
{name: "beta", type: "ferrari"},
],
"mercedes": [
{name: "charlie", type: "mercedes"},
]
}
}
你知道如何实现吗?
我认为您正在寻找以下内容(因为您的问题标题中有 TypeScript):
interface Value {
name: string;
type: string;
}
type Categorized = {
[index: string]: Record<string, Value[]>;
};
const results = Object.entries(obj).reduce<Categorized>((mapping, [key, values]) => {
const group: Record<string, Value[]> = {};
for (const value of values) {
if (group[value.type] === undefined) {
group[value.type] = [value];
} else {
group[value.type].push(value);
}
}
return {
...mapping,
[key]: group,
};
}, {});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.