Javascript-按一个属性分组,按另一个属性排序
我有一个对象数组,目前我将它们按一个属性(数字)排序。我有一个排序按钮,允许用户通过另一个属性(字符串)对它们进行排序。如何按特定值对它们进行排序,并在javascript中保持数字排序的顺序 举个简单的例子,使用姓名、年龄和喜爱颜色的人:Javascript-按一个属性分组,按另一个属性排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个对象数组,目前我将它们按一个属性(数字)排序。我有一个排序按钮,允许用户通过另一个属性(字符串)对它们进行排序。如何按特定值对它们进行排序,并在javascript中保持数字排序的顺序 举个简单的例子,使用姓名、年龄和喜爱颜色的人: Steve, 27, Blue Joe, 28, Red John, 30, Green Jane, 33, Blue Julie, 35, Blue Kevin, 40, Red 因此,如果用户希望按最喜欢的红色对列表进行排序,我希望它显示如下: Joe
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都保持相同的顺序
基本上,我想按字符串对组进行分组,然后按数字对组进行排序
谢谢你的帮助 Javascript函数将函数作为参数,可用于执行任意排序
实现所需排序的示例:
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;
});
听起来像是在尝试按(颜色=红色)、颜色、年龄排序(不是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;
}
也许可以再短一点,但我想不起来了
演示如果有人想制作一些东西,这里是JSON:从技术上讲,您只需检查
a.color
<如果您只关心“红色”,则代码>b不相关<代码>返回a.color==“红色”-1 : 1;代码>谢谢!这太完美了。
Joe 28 Red
Kevin 40 Red
Steve 27 Blue
Jane 33 Blue
Julie 35 Blue
John 30 Green