Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript-按一个属性分组,按另一个属性排序_Javascript_Arrays_Sorting - Fatal编程技术网

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

我有一个对象数组,目前我将它们按一个属性(数字)排序。我有一个排序按钮,允许用户通过另一个属性(字符串)对它们进行排序。如何按特定值对它们进行排序,并在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都保持相同的顺序

基本上,我想按字符串对组进行分组,然后按数字对组进行排序

谢谢你的帮助

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