我有一个数组数组,每个嵌套数组都包含一个包含2个值的对象: good 和 bad 。
[
0:[
count:{
good: 5,
bad: 3
}
],
1:[
count:{
good: 7,
bad: 6
}
],
2:[
count:{
good: 0,
bad: 8
}
],
3:[
count:{
good: 0,
bad: 9
}
],
4:[
count:{
good: 4,
bad: 1
}
]
]
我希望按好从高到低依次对数组进行排序,然后当 good 为0时,按降序排列其余数组通过坏从高到低排序。所以生成的数组看起来像这样:
[
0:[
count:{
good: 7,
bad: 6
}
],
1:[
count:{
good: 5,
bad: 3
}
],
2:[
count:{
good: 4,
bad: 1
}
],
3:[
count:{
good: 0,
bad: 9
}
],
4:[
count:{
good: 0,
bad: 8
}
]
]
我使用的是Underscore并且对于如何最好地处理这个问题感到有点困惑,因为有两个我想要排序的值,它们是在嵌套数组中的对象。
使用sortBy似乎是一个明显的选择,但我不确定如何先按好然后按坏进行排序。
sortBy
_.sortBy(list, iterator, [context])
返回列表的排序副本,按照通过迭代器运行每个值的结果按升序排列。 Iterator也可以是要排序的属性的字符串名称(例如
length
)。
答案 0 :(得分:1)
使用正确的数组,您可以将Array#sort
与自定义回调一起使用。
var array = [{ count: { good: 5, bad: 3 } }, { count: { good: 7, bad: 6 } }, { count: { good: 0, bad: 8 } }, { count: { good: 0, bad: 9 } }, { count: { good: 4, bad: 1 } }];
array.sort(function (a, b) {
return b.count.good - a.count.good || b.count.bad - a.count.bad;
});
console.log(array);

答案 1 :(得分:0)
实际上,在你提问之前,你的问题已得到解答。 here是一种改进的方法。