【问题标题】:How to format string of JSON data obtained from Object.values in react?如何格式化从 Object.values 中获取的 JSON 数据字符串?
【发布时间】:2020-03-17 14:01:47
【问题描述】:

我正在尝试创建一个 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,并且能够得到一大串thingThatHaveChangedForThisId: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

一旦我的数据格式正确,我就可以让它看起来不错。我也尝试过以相同的方式映射数据的值,但它会抛出错误“每个孩子都应该有一个唯一的关键道具”。我认为他们所做的,因为数组中的每个孩子都是一个键值对。我认为我在正确的轨道上,但我已经被困了一段时间。任何帮助将不胜感激!谢谢。

【问题讨论】:

  • 请提供您需要的结果示例,以便更好地理解
  • 您好,感谢您的回复,我编辑了预期的结果,我不知道如何摆脱 SO 上的空白,但理想情况下,列表中的每个条目都以数字为索引并显示该索引的详细信息。不知道这是否更清楚。
  • 正如@rupii 提到的,你能发布你预期输出的格式吗?

标签: javascript arrays json reactjs frontend


【解决方案1】:

这样的东西应该适合你

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

【讨论】:

  • 我能够让它工作,但无论出于何种原因,它都没有将条目绑定到 ID。因此,当我点击下拉/按钮时,它会为每个项目呈现整个列表。你能想出一种方法让它通过 ID 呈现吗?我已经尝试设置键和键索引,但我无法让它工作,因为当一个条目有多个 ID 时,一些键是重复的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-10
  • 2020-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多