我有一个对象数组,我目前按一个属性(数字)排序。我有一个排序按钮,允许用户按另一个属性(字符串)对它们进行排序。如何通过特定的值对它们进行排序,并将它们按照javascript中的数字排序顺序排列?
一个简单的例子,使用名字,年龄和喜欢的颜色的人:
Steve, 27, Blue
Joe, 28, Red
John, 30, Green
Jane, 33, Blue
Julie, 35, Blue
Kevin, 40, Red
因此,如果用户想要使用喜欢的红色颜色的人对列表进行排序,我希望它显示如下:
Joe, 28, Red
Kevin, 40, Red
Steve, 27, Blue
Jane, 33, Blue
Julie, 35, Blue
John, 30, Green
在所选属性之后属性的顺序并不重要,只要它们按年龄分组和排序即可。例如,上面的列表(按红色排序)可以让John在Kevin之后列出,只要所有Steve,Jane和Julie都保持相同的顺序。
基本上,我想分组字符串,然后按照字符对数字进行排序。
感谢您的帮助!
答案 0 :(得分:1)
Javascript的.sort()
函数将函数作为可用于执行任意排序的参数。
可以完成所需排序的示例:
people.sort(function(a, b) {
if (a.color == 'Red' && b.color != 'Red') return 1;
if (a.color != 'Red' && b.color == 'Red') return -1;
return 0;
});
答案 1 :(得分:0)
听起来像你正在尝试ORDER BY (color = Red), color, age
(不是SQL语法):先红色,然后按颜色分组,然后按群组年龄。
在1个分拣机中这很棘手......
我认为这是一个:
function(a, b) {
if (a.color == 'Red') {
if (b.color == 'Red') {
// Both Red, so check Age
return a.age - b.age;
}
// A is Red, so to top
return -1;
}
if (b.color == 'Red') {
// B is red, so to top
return 1;
}
if (a.color == b.color) {
// Same color, so check Age
return a.age - b.age;
}
// Different color, so check that
return a.color < b.color ? -1 : 1;
}
结果似乎如此:
Joe 28 Red
Kevin 40 Red
Steve 27 Blue
Jane 33 Blue
Julie 35 Blue
John 30 Green
也许它可以缩短,但我再也不能思考了。