按一个值对嵌套数组进行排序,然后对另一个值进

时间:2016-06-22 10:46:32

标签: javascript arrays underscore.js

我有一个数组数组,每个嵌套数组都包含一个包含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)。

2 个答案:

答案 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是一种改进的方法。