2015-09-07 228 views
0

我一整天都在阅读类似的帖子,但无法弄清楚如何通过多个属性对我的javascript数组进行排序。 我的数组有'名称'和'类型'属性。 按名称排序我现在用:通过Javascript中的多个属性对对象数组排序

   byNameDesc.sort(function (a, b) { 
        var x = a.name.toLowerCase(); 
        var y = b.name.toLowerCase(); 
        return y < x ? -1 : y > x ? 1 : 0; 
       }); 

很好用。我想增强这个功能。如果'name'是'foo',它应该总是在最上面。我也想按'类型'排序。 所以'foo'应该总是在上面,然后按'name'和'type'排序。

我尝试这样做:

   byNameDefault.sort(function (a, b) { 
        if (a.name == 'foo') { 
         return -1; 
        } 
        var x = a.type.toLowerCase(); 
        var y = b.type.toLowerCase(); 
        return x < y ? -1 : x > y ? 1 : 0; 
       }); 

但没有奏效。

我不知道如何按'名称'和'类型'进行排序。

任何帮助,非常感谢。

回答

1

对于多个排序标准,您可以从第一个标准到最后一个标准: 如果一个标准的两个条目不相等,则可以使用结果-1或1从排序函数返回。此外,在最后一个标准中,您对于两个相等的输入也可以返回0。

这里是你的情况的范例:

byNameDefault.sort(function (a, b) { 
    // compare names 
    var na = a.name.toLowerCase(); 
    var nb = b.name.toLowerCase(); 

    if (na !== nb) { 
     if (na === 'foo') 
      return -1; 
     else if (nb === 'foo') 
      return 1; 
     else 
      return na < nb ? -1 : 1; 
    } 

    // compare types 
    return a.type < b.type ? -1 : a.type > b.type ? 1 : 0; 
} 
+0

谢谢您的回答和解释。我现在明白我在做什么;) –

相关问题