[英]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.