首页 > 解决方案 > 按相等的两个键对对象数组进行排序

问题描述

我正在尝试通过两个键对对象数组进行排序,其中第一个按升序排序,第二个按相等排序。我尝试的是,仅按第一个属性对数组进行排序:

var test_array = [{number: 1, color: "#EEEE23"},
                  {number: 4, color: "#FFFFFF"},
                  {number: 5, color: "#EEEE23"},
                  {number: 1, color: "#FFFFFF"},
                  {number: 6, color: "#CCCC23"},
                  {number: 1, color: "#EEEE23"},
                  {number: 2, color: "#EEEE23"},
                  {number: 3, color: "#FFFFFF"},
                  {number: 1, color: "#FFFFFF"},
                  {number: 2, color: "#FFFFFF"},
                  {number: 3, color: "#EEEE23"},
                  {number: 2, color: "#EEEE23"},
                  {number: 3, color: "#FFFFFF"},
                  {number: 2, color: "#FFFFFF"}]

test_array.sort(function(x,y){
    return x.number - y.number || x.color === y.color

我的目标是让数组看起来像这样,其中颜色也被排序:

var test_array = [{number: 1, color: "#EEEE23"},
                  {number: 1, color: "#EEEE23"},
                  {number: 1, color: "#FFFFFF"},
                  {number: 1, color: "#FFFFFF"},
                  {number: 2, color: "#EEEE23"},
                  {number: 2, color: "#EEEE23"},
                  {number: 2, color: "#FFFFFF"},
                  {number: 2, color: "#FFFFFF"},
                  {number: 3, color: "#EEEE23"},
                  {number: 3, color: "#FFFFFF"},
                  {number: 3, color: "#FFFFFF"},
                  {number: 4, color: "#FFFFFF"},
                  {number: 5, color: "#EEEE23"},
                  {number: 6, color: "#CCCC23"}]

我的解决方案是否过于幼稚,并且使用相等性进行排序并不那么容易?

标签: javascript

解决方案


使用相等比较没有意义,因为sort()函数期望返回值是一个数字;相等比较返回truefalse。相反,您可以使用 String.localeCompare()方法:

return x.number - y.number || x.color.localeCompare(y.color);

.localeCompare()函数完全符合您的要求,根据字符串的字典顺序返回 -1、0 或 1。


推荐阅读