我有一个表行数组,需要按字段“data”升序排序。
var data = [
{data: 5},
{data: 10, sticky: true},
{data: 90},
{data: 50, sticky: true},
{data: 20, sticky: true},
{data: 70},
];
但有一个问题。我需要带有“sticky”标志的行来排序到表的顶部。我的排序功能目前看起来像这样:
data.sort(function(a, b) {
if (a.sticky) return -1;
if (b.sticky) return +1;
return mySortFunction(a, b);
});
产生
[
{data: 10, sticky: true},
{data: 50, sticky: true},
{data: 20, sticky: true},
{data: 5},
{data: 70},
{data: 90}
]
问题是,我需要“粘性”行按“数据”(asc)排序。有没有一种简单的方法可以做到这一点,而不先将数据分成粘性和非粘性组,然后对两个组运行sortfunction?
答案 0 :(得分:3)
您可以这样做:
var data = [
{data: 5},
{data: 10, sticky: true},
{data: 90},
{data: 50, sticky: true},
{data: 20, sticky: true},
{data: 70},
];
function mySortFunction(a, b) {
return a.data - b.data;
}
function sort(a, b) {
if(a.sticky === b.sticky) {
return mySortFunction(a, b);
} else if (a.sticky){
return -1;
}
// b.sticky === true
return 1;
}
console.log(data.sort(sort));