【发布时间】:2018-07-05 23:40:26
【问题描述】:
我正在尝试规范化键盘的配置。这是其中的一小部分:
keyboard.json
{
"rows": [
[
{ "label": "~" },
{ "label": "1" },
{ "label": "2" },
{ "label": "3" },
{ "label": "4" }
],
[
{ "label": "tab", size: 1.5 },
{ "label": "Q" },
{ "label": "W" },
{ "label": "E" },
{ "label": "R" }
]
]
}
我的目标是创建一个标准化对象,如下所示:
{
entities: {
keys: {
'k~0': { label: '~' },
'k10': { label: '1' },
// etc..
},
rows: {
0: ['k~0', 'k10'],
1: ['ktab0', 'kQ0'],
// etc..
}
},
result: {
rows: [0, 1, /* etc */]
}
}
目前我有这个:
import { normalize, schema } from 'normalizr'
const keySchema = new schema.Entity('keys', {}, {
idAttribute: (k) => {
return `k${k.label}${k.location || 0}`
}
})
let rowI = 0
const rowSchema = new schema.Entity('rows', {
keys: [ keySchema ]
}, {
// btw: I know this is not the best way to set an id, but I'll solve that later
idAttribute: (a, b, i) => rowI++
})
const keyboardSchema = {
rows: [ rowSchema ]
}
export default normalize(keyboardData, keyboardSchema)
这基本上将原始 json 中的行“复制”到实体,而不为每个行实体创建一个新键。见截图:
所以这就是我迷路的地方。我想我需要某种中间步骤,“在”rowSchema 中,但我不明白如何。
任何帮助表示赞赏!
【问题讨论】:
标签: json reactjs redux normalizr