首页 > 解决方案 > 编写这种排序函数的更简洁的方法

问题描述

我想不出一种更简洁的方法来编写这个函数 - 我想要一个三元组,它根据 ASCENDING 或 DECENDING 的类型切换 > 但是你似乎不能这样做。显然是在重复自己,并且知道这不好,但现在想不出另一种方式。

name: ((studies, type) => {
    let sortedStudies = studies;
    if (type === 'ASCENDING') {
      sortedStudies = studies.sort((a, b) => {
       let nameA = a.name.toUpperCase();
       let nameB = b.name.toUpperCase();
        if (nameA < nameB) {
          return -1;
        }
        if (nameA > nameB) {
          return 1;
        }
        return 0;
      });
    } else {
      sortedStudies = studies.sort((a, b) => {
       let nameA = a.name.toUpperCase();
       let nameB = b.name.toUpperCase();
        if (nameA > nameB) {
          return -1;
        }
        if (nameA < nameB) {
          return 1;
        }
        return 0;
      });
    }
    return sortedStudies
  })

标签: javascript

解决方案


这是我可以在不修改您的工作逻辑的情况下编写的最佳版本(除了我克隆数组以避免改变原始数组):

name: ((studies, type) => {
        let sortedStudies = studies.slice(0);
        if (type === 'ASCENDING')
            return sortedStudies.sort((a, b) => {
                let ans = a.name.toUpperCase() < b.name.toUpperCase() ? -1 : -2;
                return ans === -1 ? ans : Number(a.name.toUpperCase() > b.name.toUpperCase());
            });
        return sortedStudies.sort((a, b) => {
            let ans = a.name.toUpperCase() < b.name.toUpperCase() ? -1 : -2;
            return ans === -1 ? ans : Number(a.name.toUpperCase() < b.name.toUpperCase());
        });
    })

推荐阅读