在Javascript中按多个属性对对象数组进行排序

时间:2015-09-07 13:52:56

标签: javascript arrays sorting

我整天都在阅读类似的帖子,但无法弄清楚如何通过多个属性对我的javascript数组进行排序。 我的数组有一个'name'和'type'属性。 要按名称排序,我现在使用:

                byNameDesc.sort(function (a, b) {
                    var x = a.name.toLowerCase();
                    var y = b.name.toLowerCase();
                    return y < x ? -1 : y > x ? 1 : 0;
                });

效果很好。我想增强这个功能。如果'name'是'foo',它应该始终位于顶部。我也想按'类型'排序。 所以'foo'应该始终排在最前面,接下来按'name'和'type'排序。

我试过了:

                byNameDefault.sort(function (a, b) {
                    if (a.name == 'foo') {
                        return -1;
                    }
                    var x = a.type.toLowerCase();
                    var y = b.type.toLowerCase();
                    return x < y ? -1 : x > y ? 1 : 0;
                });

但那没用。

我不知道如何按'名称'和'类型'排序。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

对于多个排序条件,您可以从第一个标准到最后一个标准: 如果一个标准的两个条目不相等,则可以从sort函数返回结果-1或1.此外,在最后一个条件中,您还可以为两个相等的输入返回0。

以下是您案例的示例实现:

<script type="text/javascript">
        $(document).ready(function() {
            $("#analyze_audio").submit(function (e) {
                debugger;
                e.preventDefault();
                var url = "/analyze_audio";
                var dataToSend = {"analyze_audio": "analyze_audio"};
                var callback = function (data) {
                    debugger;
                    document.getElementById("audioresponse").innerHTML = (data);
                };
                $.post(url, dataToSend, callback, 'html');
            });
        });
    </script>