JavaScript 数组排序问题

201 阅读1分钟
  1. 欲排序数组为
    例子
    每一个对象包含一个result_id, result_id是另一个对象result的主键,该对象如下:
    例子
    每一个result对象包含一个创建时间。
  2. 目标: 对correction数组根据时间进行排序
  3. 问题: 当直接使用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()将数组的冻结状态解除并赋值给新的变量进行排序操作

  • 问题状态: 已解决 √