如何根据多种条件进行.sort

时间:2014-08-15 18:38:07

标签: javascript sorting backbone.js underscore.js

我有一个数组items,如下所示:

items.sort(function(a,b) {
});

a& b具有以下属性:

a.suggested (true, false, undefined)
a.meta.member_count (int .. 1 or more, undefined. 

我想按如下方式对项目进行排序:

  1. 所有未建议的项目。 未定义
  2. member_count,最高#first,
  3. 然后显示任何建议的=== true
  4. 排序是正确的方法吗?关于如何在sort函数中实现这一点的任何建议?

    谢谢

1 个答案:

答案 0 :(得分:0)

这将按“建议”值排序,将false / undefined值置于true值之上。之后,它将按meta.member_count(最高的第一个)排序。

items.sort(function(a,b) {
    if (a.meta.member_count === undefined) { x = 0; } else { x = a.meta.member_count;}
    if (b.meta.member_count === undefined) { y = 0; } else { y = b.meta.member_count;}

    if (a.suggested !== true) {
        if (b.suggested !== true) {
            n = x - y;
            return n < 0 ? 1 : n > 0 ? -1 : 0;
           }
        return -1;
    } else if (b.suggested === true) {
        n = x - y;
        return n < 0 ? 1 : n > 0 ? -1 : 0;
    } else {
        return 1;
    }
});

这种情况下的关键在于将未定义的member_count值转换为0,以便我们可以用它们进行数学运算。

此外,在使用JavaScript sort()函数对数字进行排序时,请确保对实际数字进行数学运算,然后使用if语句返回1,-1或0.如果直接返回值之间的差异,它会将值作为字符串而不是数字进行比较。

Fiddle