在 React js 中对 .map 数据进行排序(在顶部显示最新日期)
sort .map data in react js (show latest date on top)
我正在尝试根据日期对数据进行排序,其中最新日期必须位于列表顶部
let mapped = predefined.reduce((r, a) => {
r[a.date] = [...(r[a.date] || []), a];
return r;
}, {});
我试过这样映射
mapped
有数据列表,但是当我调用 the item.date
时没有打印任何内容
{Object.values(mapped).map((item, index) => (
<tr style={styles.tr}>
<td>{item.date}</td>
<td>
{item.criticality == "high risk" ? (
<button
// onClick={() => findgraph(user.id)}
style={styles.red}
></button>
) : item.criticality == "stable" ? (
<button
// onClick={() => findgraph(user.id)}
style={styles.green}
></button>
) : (
<button
// onClick={() => findgraph(user.id)}
style={styles.yellow}
></button>
)}
</td>
<td>
<button>view</button>
</td>
</tr>
))}
带数据的代码沙箱
DD-MM-YYYY
格式未被 new Date()
识别并返回 Invalid Date
因为它检查 DD
一个月的位置并且当 DD
更大时超过 12 就失败了。不得不使用一个简单的 util 函数来进行字符串到日期的转换。
像下面这样尝试。
Util 函数正确转换日期。
const getDateObjectFromString = (dateString) => {
const [day, month, year] = dateString.split("-");
return new Date(year, month - 1, day, 0, 0, 0, 0);
};
在您的 useEffect
中加载数据,执行 sort
并设置值。
const predefinedData = res.data;
predefinedData.sort(({ date: firstDate }, { date: secondDate }) => {
return (
getDateObjectFromString(secondDate) -
getDateObjectFromString(firstDate)
);
});
setpredefined(predefinedData);
我正在尝试根据日期对数据进行排序,其中最新日期必须位于列表顶部
let mapped = predefined.reduce((r, a) => {
r[a.date] = [...(r[a.date] || []), a];
return r;
}, {});
我试过这样映射
mapped
有数据列表,但是当我调用 the item.date
时没有打印任何内容
{Object.values(mapped).map((item, index) => (
<tr style={styles.tr}>
<td>{item.date}</td>
<td>
{item.criticality == "high risk" ? (
<button
// onClick={() => findgraph(user.id)}
style={styles.red}
></button>
) : item.criticality == "stable" ? (
<button
// onClick={() => findgraph(user.id)}
style={styles.green}
></button>
) : (
<button
// onClick={() => findgraph(user.id)}
style={styles.yellow}
></button>
)}
</td>
<td>
<button>view</button>
</td>
</tr>
))}
带数据的代码沙箱
DD-MM-YYYY
格式未被 new Date()
识别并返回 Invalid Date
因为它检查 DD
一个月的位置并且当 DD
更大时超过 12 就失败了。不得不使用一个简单的 util 函数来进行字符串到日期的转换。
像下面这样尝试。
Util 函数正确转换日期。
const getDateObjectFromString = (dateString) => {
const [day, month, year] = dateString.split("-");
return new Date(year, month - 1, day, 0, 0, 0, 0);
};
在您的 useEffect
中加载数据,执行 sort
并设置值。
const predefinedData = res.data;
predefinedData.sort(({ date: firstDate }, { date: secondDate }) => {
return (
getDateObjectFromString(secondDate) -
getDateObjectFromString(firstDate)
);
});
setpredefined(predefinedData);