如何在React中显示具有不同键的JSON?

如何解决如何在React中显示具有不同键的JSON?

我有一个输入JSON,如下所示:

data: {
    “2020-09-19”: [
        {
            end: “2020-09-19T10:30:00Z”,start: “2020-09-19T06:52:10Z”,user: “rakul”
        },{
            end: “2020-09-19T18:30:00Z”,start: “2020-09-19T10:30:00Z”,user: “jeet”
        },    {
            end: “2020-09-20T02:30:00Z”,start: “2020-09-19T18:30:00Z”,user: “rahul”
        }
    ],“2020-09-22": [
        {
            end: “2020-09-20T10:30:00Z”,start: “2020-09-20T02:30:00Z”,{
            end: “2020-09-20T18:30:00Z”,start: “2020-09-20T10:30:00Z”,{
            end: “2020-09-21T02:30:00Z”,start: “2020-09-20T18:30:00Z”,user: “rahul”
        }
    ]
}

我想在React中以以下格式显示JSON

在这里面临的挑战是,由于JSON包含多个具有不同日期的键,因此我无法对该对象执行map。有人可以建议如何以图片所示的表格/列表格式显示以上JSON吗?

解决方法

使用Object.entries()

const data = {
  "2020-09-19": [
    {
      end: "2020-09-19T10:30:00Z",start: "2020-09-19T06:52:10Z",user: "rakul",},{
      end: "2020-09-19T18:30:00Z",start: "2020-09-19T10:30:00Z",user: "jeet",{
      end: "2020-09-20T02:30:00Z",start: "2020-09-19T18:30:00Z",user: "rahul",],"2020-09-22": [
    {
      end: "2020-09-20T10:30:00Z",start: "2020-09-20T02:30:00Z",{
      end: "2020-09-20T18:30:00Z",start: "2020-09-20T10:30:00Z",{
      end: "2020-09-21T02:30:00Z",start: "2020-09-20T18:30:00Z",}

Object.entries(data).forEach(([date,content]) => {
  console.log(date)
  content.forEach((c) => {
    console.log('\t',c.start,c.end,c.user)
  })
})

,

我认为您的问题与从对象到数组的转换关系更大,以便能够对其进行迭代。有多种方法可以做到这一点:

1-您可以按照{hgb123的建议使用Object.entries()

const myObject = { a: 1,b: 2,c: 3};
const myArray = Object.entries(myObject);
console.log(myArray);

2-您可以按照{Gandzal的建议,使用Object.keys()获取对象的键,并迭代返回的数组:

const myObject = { a: 1,c: 3};
const myKeys = Object.keys(myObject);
console.log(myKeys);
const myArray = myKeys.map(key => [key,myObject[key]]);
console.log(myArray);

3-或者您可以在Object.keys()返回的数组上使用Array.prototype.reduce()

const myObject = { a: 1,c: 3};
const myArray = Object.keys(myObject).reduce((arr,key) => [...arr,[key,myObject[key]]],[]);
console.log(myArray);

无论选择哪种方法,都可以在转换后迭代数组并显示其结果:

const data = {
  "2020-09-19": [
    {
      end: "2020-09-19T10:30:00Z",};

const List = props => Object.entries(props.data).map(([date,items]) => (
      <div key={date}>
          <strong>{date}</strong><br/><br/>
          {
              items.map((content,index) => (
                  <span key={index}>
                      start: {content.start}<br/>
                      end: {content.end}<br/>
                      user: {content.user}<br/><br/>
                  </span>
              ))
          }
      </div>
  ));

ReactDOM.render(
  <List data={data} />,document.getElementById('example')
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.6/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.6/umd/react-dom.production.min.js"></script>

<div id="example"></div>

,

请参见CodeSandbox,其中包含没有样式的基本示例。

data是具有键:值对的对象。密钥是您在日程表顶部需要的日期,该密钥的值是信息(结束/开始/用户)

一种选择是使用Object.keys()函数来迭代data对象并映射Schedule组件,从而呈现数据。

const ScheduleList = (props) => {

  return (
    Object.keys(props.data).map(dateKey => {
      return <Schedule key={dateKey} dates={props.data[dateKey]} date={dateKey} />
    })
  );
}

和一个简单的用例

const App = () => {     

    return <ScheduleList data={data} />
}

Schedule组件将负责数据的表示。在Schedule组件中,粗体日期将用作props.date,结束/开始/用户数据将作为props.dates。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?