Javascript 基于两个参数的排序,使用闭包

Javascript 基于两个参数的排序,使用闭包,javascript,Javascript,我有一个物品清单。我想根据两个参数对其进行排序。我创建了一个排序函数,但我确信它可以重构。有什么建议吗 常量记分数组=[{ 代码:NOR, g:11, s:5, b:10 }, { 代码:RUS, g:13, s:11, b:9 }, { 代码:NED, g:8, s:7, b:9 } ] var getCompareFunction=primaryKey,secondaryKey=>{ 返回primaryKey,secondaryKey=>{ 返回x,y=>{ 如果x[primaryKey]

我有一个物品清单。我想根据两个参数对其进行排序。我创建了一个排序函数,但我确信它可以重构。有什么建议吗

常量记分数组=[{ 代码:NOR, g:11, s:5, b:10 }, { 代码:RUS, g:13, s:11, b:9 }, { 代码:NED, g:8, s:7, b:9 } ] var getCompareFunction=primaryKey,secondaryKey=>{ 返回primaryKey,secondaryKey=>{ 返回x,y=>{ 如果x[primaryKey]==y[primaryKey]{ 如果x[secondaryKey]>y[secondaryKey]{ 返回-1 }如果x[secondaryKey]y[primaryKey],则为else{ 返回-1 }如果x[primaryKey] const scoreArray=[{code:NOR,g:11,s:5,b:10},{code:RUS,g:13,s:11,b:9},{code:NED,g:8,s:7,b:9}] const getCompareFunction=primaryKey,secondaryKey=>x,y=> y[primaryKey]-x[primaryKey]| | y[secondaryKey]-x[secondaryKey] const compareFuncHolder=getCompareFunction'b','s' scoreArray.SortCompareUnchholder;
console.logscoreArray 通过迭代键及其返回值进行排序,可以采用嵌套的闭包和短路方法

这适用于任意数量的比较键

常数 genCompareFn=…keys=>v=>a,b=>keys.somek=>v=a[k]>b[k]-a[k].as控制台包装器{max height:100%!important;top:0;}如果要比较的值是带有非数字字符的字符串,则这不起作用,因为-有这样的字符串总是NaN。@AndrewMarshall-确实如此。添加了一个在这种情况下使用localeCompare的解决方案。为什么要让比较任意值变得如此复杂?使用是完全罚款和快速。如果您想缩短if/else语句,可以使用compare=a,b=>+a>b | |-b>a。@Bergi-我在找类似的东西。三元和局部比较,后者更好。然而,这一个赢了。