javascript - 如何格式化从 Object.values 中获取的 JSON 数据字符串?
问题描述
我正在尝试创建一个 React 手风琴下拉菜单,该菜单应显示按数组中每个单独 ID 分组的条目列表。每个 ID 都包含一个 thingsThatHaveChangedForThisId 列表,其中可以有多个条目,包括 id、property、previousValue 和 updatedValue JSON 数据如下所示
[{
"id": "id1234",
"thingsThatHaveChangedForThisId": [{
"id": "id1234",
"property": "propertyValue",
"previousValue": "123",
"updatedValue": "456"
},
{
"id": "id1234",
"property": "propertyValue2",
"previousValue": "000",
"updatedValue": "001"
},
]
},
{
"id": "id456",
"thingsThatHaveChangedForThisId": [{
"id": "id456",
"property": "name",
"previousValue": "Anakin Skywalker",
"updatedValue": "Darth Vader"
},
{
"id": "id456",
"property": "lightsaberColor",
"previousValue": "blue",
"updatedValue": "red"
}
]
},
我使用Object.values(data).map
并且能够获得大量的 thingsThatHaveChangedForThisId:id、property、previousValue 和 updatedValue 显示在每个 ID 的下拉列表中。问题在于它只是一个不按单个条目分组的字符串。我想将 thingsThatHaveChangedForThisId 中的每个项目分组,以便在单击下拉列表时将它们组织为 4 个组而不是一个大字符串。我尝试过映射 JSON 数据的键并记录结果,如下所示:
const keys = Object.keys(data);
for (let i = 0; i < keys.length; i++) {
console.log(data[keys[i]]);
}
这为我提供了由键索引的 JSON 对象中的每个项目。这几乎是我想要的。我现在需要按索引分组的子数组 thingsThatHaveChangedForThisId 的每个项目,以便我可以使其成为可读格式。就像是:
Entries for id1234:
1. id: id1234
property: property
previousValue: previousValue
updatedValue: updatedValue
2. id: id1234
property: property2
previousValue: previousValue2
updatedValue: updatedValue2
3. id: id1234
property: property3
previousValue: previousValue3
updatedValue: updatedValue3
一旦我正确格式化了数据,我就可以让它看起来不错。我也尝试过以相同的方式映射数据的值,但它会抛出错误“每个孩子都应该有一个唯一的关键道具”。我认为他们所做的,因为数组中的每个孩子都是一个键值对。我认为我在正确的轨道上,但我已经被困了一段时间。任何帮助将不胜感激!谢谢。
解决方案
像这样的东西应该适合你
const data = [{
"id": "id1234",
"thingsThatHaveChangedForThisId": [{
"id": "id1234",
"property": "propertyValue",
"previousValue": "123",
"updatedValue": "456"
},
//...
]
},
//...
];
let formattedData = [];
data.forEach(obj => {
/*
obj is:
{
"id": "id1234",
"thingsThatHaveChangedForThisId": [{
"id": "id1234",
"property": "propertyValue",
"previousValue": "123",
"updatedValue": "456"
},
//...
]
}
*/
obj.thingsThatHaveChangedForThisId.forEach(thing => {
/*
thing is:
{
"id": "id1234",
"property": "propertyValue",
"previousValue": "123",
"updatedValue": "456"
}
*/
formattedData.push({
id: obj.id,
property: thing.property,
previousValue: thing.previousValue,
updatedValue: thing.updatedValue,
});
});
});
//use formattedData
推荐阅读
- prolog - 如何在 Prolog 中表示“Alberich 讨厌除了他自己以外的所有人”?
- iis - 在 Windows Server 2012 R2 上部署 .Net Core 3 - 错误 500.19
- json - 设置嵌套 JSON 对象的属性
- javascript - 如何创建自定义 JS 函数以将图像复制到 R Shiny 中的剪贴板
- c - 在 C 中创建直方图
- python - 如何在不终止进程的情况下关闭 Tkinter 窗口?
- sql - 在使用 OVER() 子句时避免除以零错误,即使在使用 nullif 之后也是如此
- python - 在多个 Seaborn Stripplot 中可视化样本大小
- python - 为什么我使用 Scrapy 在 fetch() 上从特定网站收到错误 429?
- docker - 无法登录到 Artifactory 上的 Docker 注册表