首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Normalizr规范化嵌套数据

Normalizr规范化嵌套数据
EN

Stack Overflow用户
提问于 2017-12-09 12:08:09
回答 2查看 605关注 0票数 0

我有一个嵌套的数据,看起来像这样:

代码语言:javascript
复制
{
  components: [
    guid: "cms-container/c154c79596b3af6326966b0c994e2a934",
    regions: [{
      guid :"r1c154c79596b3af6326966b0c994e2a934",
      components: [{ 
          guid: "cms-markupfile/owg-header.html" },
        { guid: "cms-navmenu/n1503636374400" },
        { guid: "cms-container/c50c451ba72e4b4edab979cf477129215",
          regions: [{
            guid: "r1c50c451ba72e4b4edab979cf477129215",
            components: [{
              guid:"cms-serie/serieDetailRenderer"
            }]
          }]
        },
      ]
    }]
  ]
}

如您所见,这是一个具有任意嵌套的嵌套结构。也就是说,在组件数组中,还可以有一个区域数组,在该区域中,又可以有另一个组件数组。

我试着用normalizr将这个结构转换成一种扁平化的形式,但到目前为止还没有结果。如果您能帮助我解决这个问题,我将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2017-12-11 00:54:05

我会尝试这么简单的东西:

代码语言:javascript
复制
import { schema } from 'normalizr'

const schemas = {
    component: new schema.Entity('components'),
    region: new schema.Entity('regions')
}

schemas.component.define({
    regions: [schemas.region]
})
schemas.region.define({
    components: [schemas.component]
})

我害怕循环引用,但它值得一试。如果它不工作,你能提供你到目前为止所做的吗?

票数 0
EN

Stack Overflow用户

发布于 2021-08-12 15:40:32

这是个老问题,但答案可能对某些人有用。如果是这种情况,那么在最外层的组件数组中就缺少了两个{}。而不是

代码语言:javascript
复制
 {
    components: [

你应该写下

代码语言:javascript
复制
{
components: [{

在最后,而不是

代码语言:javascript
复制
  ]
}

你应该写下

代码语言:javascript
复制
 }]
}

现在,假设我对您的数据的理解是正确的,并且假设您按照建议进行了更正,那么您的规范化模式应该如下所示:

代码语言:javascript
复制
import { schema, normalize } from 'normalizr'

const regionSchema = new schema.Entity(
    'regions', 
    { components: [ componentSchema ] }, 
    { idAttribute: 'guid' }
)

const componentSchema = new schema.Entity(
    'components', 
    { regions: [ regionSchema ] }, 
    { idAttribute: 'guid' }
)

你应该像这样规范化你的数据

代码语言:javascript
复制
let data = [{
    guid: "cms-container/c154c79596b3af6326966b0c994e2a934",
    regions: [{
      guid :"r1c154c79596b3af6326966b0c994e2a934",
      components: [{ 
          guid: "cms-markupfile/owg-header.html" },
        { guid: "cms-navmenu/n1503636374400" },
        { guid: "cms-container/c50c451ba72e4b4edab979cf477129215",
          regions: [{
            guid: "r1c50c451ba72e4b4edab979cf477129215",
            components: [{
              guid:"cms-serie/serieDetailRenderer"
            }]
          }]
        },
      ]
    }]
  }]

let normalizedData = normalize(data, [componentSchema])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47725235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档