我将从 Firebase 数据库接收到的数据转换为适合在 SectionList 上使用的格式。
我已经能够创建数据结构的某些部分,但无法关联数据。
SectionList的格式如下:
[
{
index: 0,
title: "Pan simple",
data: [
{
id: 0,
},
{
id: 1,
}
]
},
{
index: 1,
title: "Pan dulce",
data: [
{
id: 0,
}
]
}
]
我从数据库收到的格式如下:
"storeName": {
products: {
'-Lo7D2Y8ZVEXnJb5LMvd': {
name: 'Pan de molde',
category: 'Molde'
},
'-Lo7C4HAkeE0cssxg9E-': {
name: 'Bollo de Hamburguresa',
category: 'Hamburguesa'
}
},
category: {
Molde: {
'-Lo7D2Y8ZVEXnJb5LMvd': true
},
Hamburguesa: {
'-Lo7C4HAkeE0cssxg9E-': true
}
}
}
其中“标题”是类别键,“数据”是产品上的对象> 分支机构。 我有这个函数来接收数据并转换它:
export default (props, storeName) => {
firebase
.database()
.ref(`Store/${storeName}`)
.on("value", function(snapshot) {
if (snapshot.val() != null) {
var values = snapshot.val() || {};
var dataFormat = [];
var x = 0;
for (var i in values.category) {
var data = Object.assign({
data: [],
index: x,
category: i
});
dataFormat.push(data);
x++;
}
console.log("Data", dataFormat);
}
});
};
当前输出为
[
{ data: [], index: 0, category: 'Molde' },
{ data: [], index: 1, category: 'Hamburguesa' }
]
预期输出将是:
[
{
data: [
{
id: 'Lo7D2Y8ZVEXnJb5LMvd',
name: 'Pan de molde',
category: 'Molde'
}
],
index: 0,
category: 'Molde'
},
{
data: [
{
id: '-Lo7C4HAkeE0cssxg9E-',
name: 'Bollo de Hamburguresa',
category: 'Hamburguesa'
}
],
index: 1,
category: 'Hamburguesa'
}
]
如何将适当的数据放入每个部分?
最佳答案
一些事情:
- 您检查
snapshot.val()
是否为!= null
,因此无需执行var value = snapshot.val() || {};
- 你知道它是真的 Object.assign
与对象文字是多余的,只需使用文字- 您使用的是 ES6,不需要坚持使用
var
- 用
map
替换for
循环会更优雅 - 您在问题中发布的输入似乎在任何地方都不包含产品 ID,因此我在这里跳过了它;如果您用更多信息更新问题,我也很乐意对此进行解释。
考虑到这一点,这是我的建议:
export default (props, storeName) => {
firebase
.database()
.ref(`Store/${storeName}`)
.on("value", function(snapshot) {
const values = snapshot.val();
if (values) {
const dataFormat = Object.keys(values.category)
.map((category, index) => ({
category,
index,
data: Object.values(values.products).filter(
product => product.category === category
)
}));
console.log("Data", dataFormat);
}
});
};
关于javascript - 如何将 JSON 转换为索引数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57837235/