使用 Underscore sortBy - 按多个部分排序
Using Underscore sortBy - Sorting by multiple parts
所以我试图根据对象的优先级和位置对对象数组进行排序。
这是我要排序的数据示例:
widgetInfo = [
{name: 'box1', position: 'mobile-top', priority: 'priority-1'},
{name: 'box2', position: 'mobile-top', priority: false},
{name: 'box3', position: 'mobile-top', priority: 'priority-2'},
{name: 'box4', position: false, priority: false},
{name: 'box5', position: 'mobile-bottom', priority: false}
];
我想要做的是让它们按顺序排列,这样 position
为 mobile-first 的对象排在第一位,然后是那些position
为 false 最后是 position
为 mobile-bottom.
然后在具有 mobile-top 的那些中,我想按 priority
的顺序对它们进行排序,因此 mobile-top priority-1 出现在 mobile-top 上方,priority-2.
所以数据会像这样:
widgetInfo = [
{name: 'box1', position: 'mobile-top', priority: 'priority-1'},
{name: 'box3', position: 'mobile-top', priority: 'priority-2'},
{name: 'box2', position: 'mobile-top', priority: false},
{name: 'box5', position: false, priority: false},
{name: 'box4', position: 'mobile-bottom', priority: false}
];
我知道我可以使用下划线 sortBy
函数并按 属性 的字符串名称排序,但是有没有办法使用它来完成我想要的事情?
我的问题与 Underscore: sortBy() based on multiple attributes 不同,因为我不是按字母顺序或数字顺序排序,而是按特定顺序排序,因此 mobile-top 是第一个,其次是通过 false 条目,然后是 mobile-bottoms,然后在其中排序。
基于这个答案 and on the expansion given in http://blog.falafel.com/nifty-underscore-tricks-sorting-by-multiple-properties-with-underscore/ taking advantage of the stability of _.sortBy
,您可以链接 sortBy
,将枚举值转换为数字。像
var sorted = _.chain(widgetInfo)
.sortBy(function(box) {
if (box.priority === false)
return Number.POSITIVE_INFINITY;
else
return +box.priority.substr(9);
})
.sortBy(function(box) {
switch(box.position) {
case 'mobile-top' : return 0;
case false : return 1;
case 'mobile-bottom' : return 2;
default: return 3;
}
})
.value();
所以我试图根据对象的优先级和位置对对象数组进行排序。
这是我要排序的数据示例:
widgetInfo = [
{name: 'box1', position: 'mobile-top', priority: 'priority-1'},
{name: 'box2', position: 'mobile-top', priority: false},
{name: 'box3', position: 'mobile-top', priority: 'priority-2'},
{name: 'box4', position: false, priority: false},
{name: 'box5', position: 'mobile-bottom', priority: false}
];
我想要做的是让它们按顺序排列,这样 position
为 mobile-first 的对象排在第一位,然后是那些position
为 false 最后是 position
为 mobile-bottom.
然后在具有 mobile-top 的那些中,我想按 priority
的顺序对它们进行排序,因此 mobile-top priority-1 出现在 mobile-top 上方,priority-2.
所以数据会像这样:
widgetInfo = [
{name: 'box1', position: 'mobile-top', priority: 'priority-1'},
{name: 'box3', position: 'mobile-top', priority: 'priority-2'},
{name: 'box2', position: 'mobile-top', priority: false},
{name: 'box5', position: false, priority: false},
{name: 'box4', position: 'mobile-bottom', priority: false}
];
我知道我可以使用下划线 sortBy
函数并按 属性 的字符串名称排序,但是有没有办法使用它来完成我想要的事情?
我的问题与 Underscore: sortBy() based on multiple attributes 不同,因为我不是按字母顺序或数字顺序排序,而是按特定顺序排序,因此 mobile-top 是第一个,其次是通过 false 条目,然后是 mobile-bottoms,然后在其中排序。
基于这个答案 and on the expansion given in http://blog.falafel.com/nifty-underscore-tricks-sorting-by-multiple-properties-with-underscore/ taking advantage of the stability of _.sortBy
,您可以链接 sortBy
,将枚举值转换为数字。像
var sorted = _.chain(widgetInfo)
.sortBy(function(box) {
if (box.priority === false)
return Number.POSITIVE_INFINITY;
else
return +box.priority.substr(9);
})
.sortBy(function(box) {
switch(box.position) {
case 'mobile-top' : return 0;
case false : return 1;
case 'mobile-bottom' : return 2;
default: return 3;
}
})
.value();