Sorting 如何使用下划线根据特定属性值对集合进行排序?
我有一个对象集合,我希望能够以这样一种方式对其进行排序,即所有属性值为“false”的对象都应该出现在其他对象之前。这是集合的结构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
[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;
});