我有一个嵌套的数据,看起来像这样:
{
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将这个结构转换成一种扁平化的形式,但到目前为止还没有结果。如果您能帮助我解决这个问题,我将不胜感激。
发布于 2017-12-11 00:54:05
我会尝试这么简单的东西:
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]
})我害怕循环引用,但它值得一试。如果它不工作,你能提供你到目前为止所做的吗?
发布于 2021-08-12 15:40:32
这是个老问题,但答案可能对某些人有用。如果是这种情况,那么在最外层的组件数组中就缺少了两个{}。而不是
{
components: [你应该写下
{
components: [{在最后,而不是
]
}你应该写下
}]
}现在,假设我对您的数据的理解是正确的,并且假设您按照建议进行了更正,那么您的规范化模式应该如下所示:
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' }
)你应该像这样规范化你的数据
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])https://stackoverflow.com/questions/47725235
复制相似问题