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>