我正在尝试通过两个键对对象数组进行排序,其中第一个按升序排序,第二个按相等性排序。我尝试过,仅按第一个属性对数组进行排序:
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"}]
我的解决方案是否太幼稚,使用平等进行排序并不容易呢?
答案 0 :(得分:6)
使用相等比较没有意义,因为sort()
函数期望返回值是一个数字;相等比较返回true
或false
。相反,您可以使用String .localeCompare()
方法:
return x.number - y.number || x.color.localeCompare(y.color);
.localeCompare()
函数可以完全满足您的要求,根据字符串的字典顺序返回-1、0或1。