用相等的两个键对对象数组进行排序

时间:2018-06-19 21:38:11

标签: javascript

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

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"}]

我的解决方案是否太幼稚,使用平等进行排序并不容易呢?

1 个答案:

答案 0 :(得分:6)

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

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

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