- 数组排序使用方法:MDN官方解释
- 遇到问题:实例如下
- 欲排序数组为
每一个对象包含一个result_id,result_id是另一个对象result的主键,该对象如下: 每一个result对象包含一个创建时间。 - 目标: 对correction数组根据时间进行排序
- 问题: 当直接使用
sort()方法时,回报错,因为corrections对象被冻结,无法操作对象,也无法按照时间进行比较,问题代码如下:
export const getDesktopATraiterByDate = createSelector(
getFilteredUserAtraiter,
getHistory,
(corrections: Correction[], history: GetResult) => {
if (corrections && history) {
corrections.sort((a, b) => {
const dateA = history.result.find(result => result.resultId === a.result_id).resultDate;
const dateB = history.result.find(result => result.resultId === b.result_id).resultDate;
if (dateA > dateB) {
return -1;
}
if (dateA < dateB) {
return 1;
}
return 0;
});
}
return corrections;
}
);
这里的corrections对象是从NgRx的状态中获取的,问题就出在这个等待排序的corrections对象身上
- 解决办法,将数组解冻
export const getDesktopATraiterByDate = createSelector(
getFilteredUserAtraiter,
getHistory,
(corrections: Correction[], history: GetResult) => {
if (corrections && history) {
const temp = corrections.slice();
temp.sort((a, b) => {
const dateA = history.result.find(result => result.resultId === a.result_id).resultDate;
const dateB = history.result.find(result => result.resultId === b.result_id).resultDate;
if (dateA > dateB) {
return -1;
}
if (dateA < dateB) {
return 1;
}
return 0;
});
return temp;
}
}
);
使用corrections.slice()将数组的冻结状态解除并赋值给新的变量进行排序操作
- 问题状态: 已解决 √