按类别对JavaScript对象排序,然后按类别消息排序

按类别对JavaScript对象排序,然后按类别消息排序,javascript,arrays,internet-explorer,Javascript,Arrays,Internet Explorer,我有4个类别,必须按照我在下面的数组中定义的顺序显示。我试图按这些类别进行排序,然后按字母顺序对每个类别中的邮件进行排序 我在下面的代码中引入了for循环,但我不确定如何将已排序的消息添加回messagesL对象中,messagesL对象是传递给代码其余部分的对象。如有任何提示,将不胜感激 这是我的密码: PKG.render = function(work,PKG) { var data = work.details; var messagesL

我有4个类别,必须按照我在下面的数组中定义的顺序显示。我试图按这些类别进行排序,然后按字母顺序对每个类别中的邮件进行排序

我在下面的代码中引入了for循环,但我不确定如何将已排序的消息添加回messagesL对象中,messagesL对象是传递给代码其余部分的对象。如有任何提示,将不胜感激

这是我的密码:

PKG.render = function(work,PKG) {
            var data = work.details;
            var messagesL = new util.LocalDataSource(data);
            messagesL.responseSchema = {
                    resultsList: "messages",       
                    fields: [
                        "messageId",
                        "category",
                        "message"
                        ]
            };
            /*there could be more categories, ignore them*/
            var categories = ["Mentoring", "Availability", "Affordability", "Scalability", "Info"];
            var messagesColumnDefs = [
                         { key: "Id", label: "ID"},
                         { key: "category", label: "Category"},
                         { key: "message", label: "Text"}
            ];

            var messagesConfig = {  MSG_EMPTY: 'There are no messages to display.',
                                    MSG_ERROR: 'Error while loading table'
                                };
            var sortedMessagesByCategory;
            for (var i = 0; i < categories.length; i++) 
            {
                var messagesByCategory;
                for(var j = 0; j < data.messages.length; j++)
                {
                  if(data.messages[j].category === categories[i])
                      messagesByCategory.push(data.messages[j].message);
                }
                if(typeof messagesByCategory !== "undefined")
                    messagesByCategory.sort();
                /*not sure how to add sorted messages back in messagesL object*/
            }          
            messagesTable = new widget.DataTable('wrmessagesTable', messagesColumnDefs, messagesL, messagesConfig);
            workResultsWidgetCollectionPush(messagesTable);
        } 
PKG.render=函数(工作,PKG){
var数据=工作细节;
var messagesL=new util.LocalDataSource(数据);
messagesL.responseSchema={
结果列表:“消息”,
字段:[
“消息ID”,
“类别”,
“消息”
]
};
/*可能会有更多的类别,忽略它们*/
风险值类别=[“指导”、“可用性”、“可承受性”、“可扩展性”、“信息”];
var messagesColumnDefs=[
{键:“Id”,标签:“Id”},
{键:“类别”,标签:“类别”},
{键:“消息”,标签:“文本”}
];
var messagesConfig={MSG_EMPTY:'没有要显示的消息',
MSG_ERROR:“加载表时出错”
};
var-sortedMessagesByCategory;
对于(变量i=0;i
。为什么不直接使用
排序
功能而不是
循环<代码>var sortedMessagesByCategory=data.messages.slice(0).sort((a,b)=>categories.indexOf(b.category)-categories.indexOf(a.category))
@CertainPerformance sort((a,b)=>)部分为我出错。赋值的左侧必须是一个变量,并且它也不喜欢=>。@CertainPerformance我修改了您的代码:var sortedMessagesByCategory=data.messages.slice(0).sort(函数(a,b){categories.indexOf(b.category)-categories.indexOf(a.category)});但这不是按类别排序,然后是按消息排序,这正是我想要的。分类到处都是。