在TypeScript中,处理嵌套键的对象的分组数组通常涉及到对对象进行迭代和转换。以下是一些基础概念和相关操作:
假设我们有一个嵌套键的对象数组,我们想要根据某个嵌套键的值来分组:
interface Item {
id: number;
info: {
category: string;
subcategory: string;
};
}
const items: Item[] = [
{ id: 1, info: { category: 'A', subcategory: 'X' } },
{ id: 2, info: { category: 'A', subcategory: 'Y' } },
{ id: 3, info: { category: 'B', subcategory: 'X' } },
];
function groupByNestedKey<T, K extends keyof T>(array: T[], key: K): Record<T[K], T[]> {
return array.reduce((acc, item) => {
const groupKey = item[key] as string;
if (!acc[groupKey]) {
acc[groupKey] = [];
}
acc[groupKey].push(item);
return acc;
}, {} as Record<T[K], T[]>);
}
const groupedByCategory = groupByNestedKey(items, 'info');
console.log(groupedByCategory);
问题: 如果嵌套键的路径更深,如何处理?
解决方法: 可以使用递归函数来遍历深层次的嵌套键。
function getNestedValue(obj: any, path: string[]): any {
return path.reduce((acc, part) => acc && acc[part], obj);
}
function groupByDeepNestedKey<T>(array: T[], path: string[]): Record<any, T[]> {
return array.reduce((acc, item) => {
const groupKey = getNestedValue(item, path);
if (!acc[groupKey]) {
acc[groupKey] = [];
}
acc[groupKey].push(item);
return acc;
}, {} as Record<any, T[]>);
}
const groupedByDeepCategory = groupByDeepNestedKey(items, ['info', 'category']);
console.log(groupedByDeepCategory);
通过这种方式,可以灵活地处理各种复杂的数据分组需求。
领取专属 10元无门槛券
手把手带您无忧上云