Reactjs 如何在映射函数中的同一日期创建的映射项组之前插入标题?

Reactjs 如何在映射函数中的同一日期创建的映射项组之前插入标题?,reactjs,Reactjs,我正在尝试映射一组对象,如下所示: import React from 'react'; import moment from 'moment'; const designItems = () => { const itemsList = [ { id: 30, name: "Item 30", created_at: "2020-12-09T09:23:58.936Z" }, // etc.

我正在尝试映射一组对象,如下所示:

import React from 'react';
import moment from 'moment';

const designItems = () => {
  const itemsList = [
    {
      id: 30,
      name: "Item 30",
      created_at: "2020-12-09T09:23:58.936Z"
    }, // etc.
  ];

  const items = itemslist.map((item, i) => {
    const monthName = moment(item.created_at, 'YYYY-MM-DDTHH:mm:ss.SSS[Z]').format('MMMM');
    const yearName = moment(item.created_at, 'YYYY-MM-DDTHH:mm:ss.SSS[Z]').format('YYYY');

    return (
      <p key={item.id}>{item.name}</p>
    );
  });

  return (
    <div>
      {items}
    </div>
  );
};

export default designItems;
你好吗

您可以创建按月/年对项目进行分组的结构。您可以先编写一个函数来实现这一点,然后遍历此结构。例如:

功能组ItemsByEarandMonth(项目){
常量分组={}
items.forEach(item=>{
const deargename=moment(item.created_位于'YYYY-MM-DDTHH:MM:ss.SSS[Z]')。格式('YYYY');
const monthName=时刻(item.created_位于'YYYY-MM-DDTHH:MM:ss.SSS[Z]')。格式('MMMM');
const key=`${monthName}${earname}`;
//如果密钥不存在,我们将创建它
如果(!分组[键]){
分组[键]=[];
}
分组[键]。推送(项);
})
分组返回;
}
上述函数将返回一个对象,其中键为
年+月
,每个键的值将是一个项目数组,例如:

{
“2020年12月”:[
{名称:'项目30'},
{名称:'项目29'},
]
“2020年11月”:[
{名称:'项目28'},
{名称:'项目27'},
]
}
现在,您可以使用
object.entries(groupedItems.map)([yearAndMonth,items])
在对象上迭代。请参阅下面的示例:

const-App=()=>{
常数列表=[
{
id:1,
名称:“项目1”,
创建于:“2020-12-09T09:23:58.936Z”
},
{
id:2,
名称:“项目2”,
创建于:“2020-12-08T09:23:58.936Z”
},
{
id:3,
名称:“项目3”,
创建于:“2020-11-09T09:23:58.936Z”
},
{
id:4,
名称:“项目4”,
创建于:“2020-11-08T09:23:58.936Z”
},
];
const groupedItems=groupItemsByEarandMonth(列表);
const renderItems=项目=>{
返回items.map(item=>(

{item.name}

)) } 返回( {Object.entries(groupedItems.map)([yearMonth,items])=>( {yearMonth} {renderItems(项目)} ))} ); }

我已经创建了这个,您可以查看它。:)

工作起来很有魅力。谢谢。不客气,我的朋友!
<div>
  <h3>December 2020</h3>
  <p>Item 30</p>
  <p>Item 29</p>
  <h3>November 2020</h3>
  <p>Item 28</p>
  <p>Item 27</p>
  ...
<div>