Sorting 如何使用下划线根据特定属性值对集合进行排序?

Sorting 如何使用下划线根据特定属性值对集合进行排序?,sorting,collections,underscore.js,Sorting,Collections,Underscore.js,我有一个对象集合,我希望能够以这样一种方式对其进行排序,即所有属性值为“false”的对象都应该出现在其他对象之前。这是集合的结构 [Object, Object, Object, Object] 0: Object attribute1: some value attribute2: some value attribute3: some value attribute4: false 我希望属性4值为false的所有对象显示在属性4值为true的对象之前。这怎么能用下划线来表示呢?将att

我有一个对象集合,我希望能够以这样一种方式对其进行排序,即所有属性值为“false”的对象都应该出现在其他对象之前。这是集合的结构

[Object, Object, Object, Object]
0: Object
attribute1: some value
attribute2: some value
attribute3: some value
attribute4: false

我希望属性4值为false的所有对象显示在属性4值为true的对象之前。这怎么能用下划线来表示呢?

attribute4
转换成一个数字并按该数字排序

var sorted = _(unsorted).sortBy(function(x) { return x.attribute4 === false ? 0 : 1; });

如果您只想根据
attribute4
将数组分成两部分,那么您并不是在进行排序,而是在进行分区。如果是这样,则可以使用将阵列拉开并将零件重新组合在一起:

var a = [
    { p1:  6, p2: false },
    { p1: 11, p2: true  },
    { p1: 23, p2: true  },
    { p1: 42, p2: false }
];
var b = _(a).chain()
            .partition(function(o) { return !o.p2 })
            .flatten()
            .value();
演示:

如果您真的在排序,那么您几乎肯定会需要一个辅助排序键,然后您应该使用下划线的
排序(它根本无法处理多键排序):

演示:

var b = a.sort(function(a, b) {
    if(a.p2 == b.p2)
        return a.p1 - b.p1;
    if(a.p2)
        return 1;
    return -1;
});