我有一个对象集合,我希望能够对所有具有特定属性值的对象进行排序,因为' false'应该出现在其他人面前。这是集合的结构
[Object, Object, Object, Object]
0: Object
attribute1: some value
attribute2: some value
attribute3: some value
attribute4: false
我希望属性4值为false的所有对象出现在attribute4值为true的对象之前。这怎么能用下划线来表达呢?
答案 0 :(得分:1)
将attribute4
转换为数字并按此排序......
var sorted = _(unsorted).sortBy(function(x) { return x.attribute4 === false ? 0 : 1; });
答案 1 :(得分:0)
如果您只是想根据attribute4
将数组分成两部分,那么您实际上并没有进行排序,而是进行分区。如果是这样,那么您可以使用_.partition
拉开阵列并_.flatten
将部件重新组合在一起:
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();
演示:http://jsfiddle.net/ambiguous/EWd35/
如果你真的在排序,那么你几乎肯定想要一个辅助排序键然后你应该使用Array.prototype.sort
而不是Underscore的sortBy
(它根本不能处理多键排序)孔):
var b = a.sort(function(a, b) {
if(a.p2 == b.p2)
return a.p1 - b.p1;
if(a.p2)
return 1;
return -1;
});