减少 reactjs 中按类别区分的数组

如何解决减少 reactjs 中按类别区分的数组

我正在用 reactjs 开发一个应用程序,我有数组:

array = [
  {
    "id": 1,"categoryId": 2,"period": "202101","type": "A","price": 100,"discount": 0
  },{
    "id": 2,"period": "202102","type": "B","price": 300,"discount": 20
  },{
    "id": 3,"period": "202103","price": 200,"discount": 70
  },{
    "id": 4,"period": "202104","discount": 50
  },]

我需要减少它以将其显示为表格:

enter image description here

我做了什么来显示每期价格的详细信息:

  const items = array.reduce((acc,e) => {
    if (!acc[e["categoryId"]]) {
      acc[e["categoryId"]] = {
        [e["period"]]: e["price"]
      }
    } else {
      acc[e["categoryId"]][e["period"]] = e["price"]
    }
    return acc
  },{})

  const periods = [...new Set(Object.keys(items).map(i => Object.keys(items[i])).flat())]

thead

  <tr>{dates.map(date => <th>{date}</th>)}</tr>      

tbody

Object.keys(items).map((item) => {
              return (
                <tr>
                  <td>{item}</td>
                  {periods.map((period) => <td>{items[item][period] || ''}</td>)}
                </tr>
              )
            })

但它只显示每个 priceperiod。我还需要显示 discounttype

需要什么改变,有什么建议吗?

解决方法

我想我没有很好地理解您的需求, 但这是我根据您的描述所做的:

array.reduce((acc,curr) => {
if (!acc[curr["categoryId"]]) {
  acc[curr["categoryId"]] = {
    [curr["period"]]: { 
        "price": curr["price"],"type": curr["type"],"discount": curr["discount"]
      }
  }
} else {
  acc[curr["categoryId"]][curr["period"]] = { 
        "price": curr["price"],"discount": curr["discount"]
      }
}
return acc;
},{})

这种减少的结果是:

{
"2": {
    "202101": {
        "price": 100,"type": "A","discount": 0
    },"202102": {
        "price": 300,"type": "B","discount": 20
    },"202103": {
        "price": 200,"discount": 70
    },"202104": {
        "price": 100,"discount": 50
    }
 }
}
,

您正在寻找的是将数组中的项目分组并显示它们。:

let array = [
  {
    id: 1,categoryId: 2,period: "202101",type: "A",price: 100,discount: 0
  },{
    id: 2,period: "202102",type: "B",price: 300,discount: 20
  },{
    id: 3,period: "202103",price: 200,discount: 70
  },{
    id: 4,period: "202104",discount: 50
  }
];

let dates = array.map((e) => <th>{e.period}</th>);
let prices = array.map((e) => <td>{e.price}</td>);
let discounts = array.map((e) => <td>{e.discount}</td>);
let types = array.map((e) => <td>{e.type}</td>);

function App() {
  return (
    <div className="App">
      <table>
        <tr>{dates}</tr>
        <tr>{prices}</tr>
        <tr>{discounts}</tr>
        <tr>{types}</tr>
      </table>
    </div>
  );
}
ReactDOM.render(<App/>,document.getElementById('root'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 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元字符(。)和普通点?