繁体   English   中英

如何基于确定的属性值对JavaScript中的对象数组进行排序?

[英]How to sort array of objects in JavaScript based on definite attribute value?

所以我有这个通知对象数组,必须按严重性从高到低的顺序进行排序,即Error > Warning > Information

例:

var notificationArray = [ {
    code : "103",
    severity : "Error"
}, {
    code : "104",
    severity : "Information"
}, {
    code : "109",
    severity : "Error"
}, {
    code : "403",
    severity : "Warning"
}, {
    code : "510",
    severity : "Information"
}, {
    code : "114",
    severity : "Warning"
}, {
    code : "144",
    severity : "Error"
}, {
    code : "413",
    severity : "Warning"
} ];

确保此数组始终根据severity排序的最简单方法是什么?

PS:对对象数组进行排序还有其他线程,但我最常发现的是unicode排序,而不是通过与固定值进行比较来进行排序。 抱歉,如果我发布了重复的问题。

您可以按照优先级对订单对象进行排序。

 var notificationArray = [{ code: "103", severity: "Error" }, { code: "104", severity: "Information" }, { code: "109", severity: "Error" }, { code: "403", severity: "Warning" }, { code: "510", severity: "Information" }, { code: "114", severity: "Warning" }, { code: "144", severity: "Error" }, { code: "413", severity: "Warning" }, { code: "131", severity: "Error"}], order = { Error: 1, Warning: 2, Information: 3 }; notificationArray.sort(function (a, b) { return order[a.severity] - order[b.severity]; }); console.log(notificationArray); 
 .as-console-wrapper { max-height: 100% !important; top: 0; } 

这里是一个解决方案:

var errors = notificationArray.map(function(message) {
  return message.severity === 'Error';
});
var warnings = notificationArray.map(function(message) {
  return message.severity === 'Warning';
});
var infos = notificationArray.map(function(message) {
  return message.severity === 'Information';
});

var sortedMessage = errors.concat(warnings).concat(infos);

我不知道它是否比@NinaScholz解决方案更快(也许对您来说更不稳定)。

对于每种严重性,请关联一个优先级

例如:

var severity = {
    information: 0
    warning : 1,
    error : 2, 
}

然后根据每个严重性的优先级对数组进行排序

notificationArray.sort(function(a, b) {
    var p1 = severity[a.severity.toLowerCase()];
    var p2 = severity[b.severity.toLowerCase()];
    return p2 - p1;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM