规范化深层嵌套数据

Posted

技术标签:

【中文标题】规范化深层嵌套数据【英文标题】:Normalize Deep nested data 【发布时间】:2021-10-04 15:56:43 【问题描述】:

我需要用深度嵌套的结构规范化 api 响应数据。 我正在使用这个https://github.com/paularmstrong/normalizr 来规范我的数据。

我有一个输入数据

const data = [
  id: 'component1,
  name: 'component one,
  properties:[
    name: 'text',
    color: 'red'
  ]
,

  id: 'component2,
  name: 'component two',
  properties:[
    name: 'text',
    color: 'yellow'
  ,
    name: 'button',
    color: 'blue'
  ]
]

标准化后的预期输出

     
      entities: 
        component1: 
           id: 'component1,
           name: 'component one,
           properties: 
             entities: 
               text: 
                  name: 'text',
                  color: 'red'
               
             ,
             results: ['text']
           
        ,
        component2: 
           id: 'component2,
           name: 'component two,
           properties: 
             entities: 
               text: 
                  name: 'text',
                  color: 'yellow'
               ,
               button: 
                 name: 'button',
                 color: 'blue'
               
             ,
             results: ['text', 'button']
           
        
      ,
      results: ['component1', 'component2']
    

请帮忙

【问题讨论】:

【参考方案1】:

这是我的方法,使用forEach() 迭代所有数据,以便以您想要的格式重新排列:

const data = [id: 'component1',name: 'component one',properties:[name: 'text',color: 'red'],id: 'component2',name: 'component two',properties:[name: 'text',color: 'yellow',name: 'button',color: 'blue']];

let result = entities: , result: [];
data.forEach(c => 
  result.result.push(c.id);
  result.entities[c.id] = 
    id: c.id,
    name: c.name,
    properties: 
      entities: Object.fromEntries(c.properties.map(p => [p.name, p])),
      results: c.properties.map(p => p.name)
    
  ;
);

console.log(result);

【讨论】:

以上是关于规范化深层嵌套数据的主要内容,如果未能解决你的问题,请参考以下文章

如何使用熊猫规范化来自excel文件的嵌套字典数据

Normalizr 规范化嵌套数据

将非规范化表转换为嵌套结构

使用不同的键规范化嵌套的 json

如何查询非规范化 BigQuery 表以输出嵌套和重复的字段

Symfony 2 使用自定义非规范化器对嵌套对象进行非规范化