Javascript 如何将sort()与两个筛选器结合使用?

Javascript 如何将sort()与两个筛选器结合使用?,javascript,reactjs,Javascript,Reactjs,我在一个数组上有两个过滤器,希望按字母顺序排序。当我记录const sortAlphabeticEnabled时,它会按照字母顺序返回i18n文件中的客户机名称。但这似乎并没有更新på项目。有人知道如何解决这个问题吗?如果您愿意,我可以上传i18n文件。sort接受两个参数,即现在比较的两个项目,并返回1,-1,0,这是假定在之前的两个项目之间的结果 似乎您希望对accord item.client进行排序,因此类似的操作可能会实现a.client>b.client是一个bool,其值为1或0

我在一个数组上有两个过滤器,希望按字母顺序排序。当我记录const sortAlphabeticEnabled时,它会按照字母顺序返回i18n文件中的客户机名称。但这似乎并没有更新på项目。有人知道如何解决这个问题吗?如果您愿意,我可以上传i18n文件。

sort接受两个参数,即现在比较的两个项目,并返回1,-1,0,这是假定在之前的两个项目之间的结果

似乎您希望对accord item.client进行排序,因此类似的操作可能会实现a.client>b.client是一个bool,其值为1或0

.sort((a, b) => sortAlphabeticEnabled ? (a.client>b.client)*2-1 : 0)
传递给的函数接受两个参数,并且必须返回它们的比较结果,而不仅仅是true或false。要比较字符串值,可以使用.localeCompare

此外,您还应首先进行条件检查,以避免额外操作:

const filteredCases = enabledCategoryFilter ? 
    allCases.filter(cases => cases.category.includes(enabledCategoryFilter)) : allCases;
filteredCases = awardFilterEnabled ?
    filteredCases.filter(cases => cases.awardWinning) : filteredCases;
filteredCases = sortAlphabeticEnabled  ? 
    filteredCases.sort((case1, case2) => case1.client.localeCompare(case2.client)) : filteredCases;

否则,JS将枚举数组项,而不管您是否需要对其进行筛选。

但这种排序是按哪个比另一个大的顺序进行的吗?还是按字母顺序排列?因为排序的默认状态是字母。除了两个项目相互比较是的,它是按字母顺序排列的,你是对的,默认情况下,它是按字母顺序排列的,但在你传入案例的那一刻,它不是数组,而是映射的项目,除此之外,为了使排序不影响数组,您应该使用0,而不是过滤器中的true。请小心。这种字符串比较可能会导致意外的结果,因为它们是用utf-16编码的