Javascript 如何格式化从react中的Object.values获取的JSON数据字符串?
我试图创建一个React accordion下拉菜单,该菜单应显示按数组中每个ID分组的条目列表。每个ID都包含一个具有ChangedForthis的内容列表,该列表可以包含多个条目,包括ID、属性、previousValue和updatedValue。JSON数据如下所示Javascript 如何格式化从react中的Object.values获取的JSON数据字符串?,javascript,arrays,json,reactjs,frontend,Javascript,Arrays,Json,Reactjs,Frontend,我试图创建一个React accordion下拉菜单,该菜单应显示按数组中每个ID分组的条目列表。每个ID都包含一个具有ChangedForthis的内容列表,该列表可以包含多个条目,包括ID、属性、previousValue和updatedValue。JSON数据如下所示 [{ "id": "id1234", "thingsThatHaveChangedForThisId": [{ "id": "id1234", "property": "propert
[{
"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
,并且能够获得一个大字符串,它在每个id的下拉列表中显示了已更改的内容:id、属性、previousValue和updatedValue。问题是,它只是一个字符串,没有按单个条目分组。我想将每个项目分组为ThinghaveChangedFortissid,这样当单击下拉列表时,它们将以4个为一组,而不是一个大字符串。我已经尝试过映射JSON数据的键并记录结果,如下所示:
const keys=Object.keys(数据);
for(设i=0;i
这为我提供了JSON对象中由键索引的每个项。这几乎就是我想要的。现在,我需要子数组中的每一项内容,这些内容都经过索引分组,以使其成为可读的格式。比如:
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
像这样的东西应该适合你
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
请提供一个更好理解所需结果的示例Hi感谢您的回复,我按照预期结果进行了编辑,我不知道如何消除空白,但理想情况下,列表中的每个条目都会用数字索引,并显示该索引的详细信息。不确定这是否更清楚。正如@rupii提到的,你能发布你预期输出的格式吗?请提供一个你需要的结果示例,以便更好地理解。谢谢你的回复,我用预期结果编辑,我不知道如何消除空白,但理想情况下,它应该是列表中的每个条目都用数字索引,并显示该索引的详细信息。不确定这是否更清楚。正如@rupii所提到的,您可以发布预期输出的格式吗?我可以让它工作,但无论出于何种原因,它没有将条目绑定到ID。因此,当我点击下拉/按钮时,它会呈现每个项目的整个列表。你能想出一种方法让它通过ID渲染吗?我已经尝试过按键设置键和索引,但我无法让它工作,因为当一个条目有多个ID时,某些键会重复。我可以让它工作,但无论出于何种原因,它都不会将条目绑定到ID。因此,当我点击下拉/按钮时,它会呈现每个条目的整个列表。你能想出一种方法让它通过ID渲染吗?我已经尝试过设置键和按键索引,但我无法让它工作,因为当一个条目有多个ID时,有些键是重复的。