请问是否有:扁平的数据结构和嵌套数据结构相互转化的三方库?

我知道:
使用lodash可以让扁平的数据结构和嵌套数据结构相互转化:

import _ from 'lodash';

interface FlatItem {
  id: number;
  parentId: number | null;
  name: string;
}

const flatData: FlatItem[] = [
  { id: 1, parentId: null, name: 'Item 1' },
  { id: 2, parentId: 1, name: 'Item 2' },
  { id: 3, parentId: 1, name: 'Item 3' },
  { id: 4, parentId: 2, name: 'Item 4' },
];

const nestedData = _.values(_.mapValues(_.groupBy(flatData, 'parentId'), (items) =>
  _.map(items, (item) => ({
   ...item,
    children: _.isEmpty(item.parentId)? undefined : nestedData.find((nested) => nested.id === item.parentId)?.children || [],
  }))
));

console.log(nestedData);

但是我觉得这样编写代码还是比较复杂,请问是否有三方库专门针对嵌套数据结构和扁平数据结构的转换?

阅读 523
avatarAI BotBETA

是的,存在专门针对嵌套数据结构和扁平数据结构转换的三方库。

一个流行的库是 flatten-js(虽然它主要侧重于扁平化,但结合其他库或自定义逻辑可以方便地实现反向转换)。不过,对于更直接地处理树形结构与扁平数组之间的转换,你可能想要查找或考虑使用如 normalizr(虽然它主要用于将嵌套的数据结构正规化为扁平形式,用于Redux等状态管理库)或者 flat-to-nestednested-to-flat 这样的专门库。

然而,需要注意的是,flat-to-nestednested-to-flat 可能不是非常广泛认知的库,且其API和可用性可能因项目而异。在撰写此答案时,我并未直接找到广泛认可且专门用于此目的的库,但你可以通过npm或GitHub搜索来查找最新和最适合你需求的库。

对于你提供的具体场景,如果你想要简化代码并避免手动编写复杂的嵌套逻辑,考虑编写一个自定义工具函数或使用现有的工具库(如lodash但更优化的方式),或者探索社区中是否有更新的、更专注于此的库。

此外,如果你的项目依赖于React或Vue等前端框架,可能会有一些生态系统内的解决方案或库,这些库可能更适合于处理这些类型的转换,尤其是在组件状态管理或数据传递方面。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Microsoft
子站问答
访问
宣传栏