在JavaScript中定义固定排序顺序

时间:2016-01-06 11:21:09

标签: javascript sorting

我的研究中没有找到任何东西所以我认为有人可以帮助我。

我的问题是我想要对包含状态的对象数组进行排序:

{
    "data":[
        {
            "status":"NEW"
        },
        {
            "status":"PREP"
        },
        {
            "status":"CLOS"
        },
        {
            "status":"END"
        },
        {
            "status":"ERR"
        },
        {
            "status":"PAUS"
        }
    ]
}

现在我想设置一个固定的排序顺序,就像所有状态为“END”的对象首先出现,然后是状态为“PREP”的所有对象,依此类推。

有没有办法在JavaScript中执行此操作?

提前致谢:)

2 个答案:

答案 0 :(得分:3)

这是一个使用标准.sort()回调的非常简单的比较操作:

var preferredOrder = ['END', 'ERR', ..];
myArray.sort(function (a, b) {
    return preferredOrder.indexOf(a.status) - preferredOrder.indexOf(b.status);
});

答案 1 :(得分:2)

您可以将对象与其订单值一起使用,然后对其进行排序。



var obj = { "data": [{ "status": "NEW" }, { "status": "PREP" }, { "status": "CLOS" }, { "status": "END" }, { "status": "ERR" }, { "status": "PAUS" }] };

obj.data.sort(function (a, b) {
    var ORDER = { END: 1, PREP: 2, PAUS: 3, CLOS: 4, ERR: 5, NEW: 6 };
    return (ORDER[a.status] || 0) - (ORDER[b.status] || 0);
});

document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');
&#13;
&#13;
&#13;