如何根据确定的属性值对JavaScript中的对象数组进行排序?
问题描述:
所以我有此数组通知的对象,其具有在降低严重性即Error
>Warning
>Information
的顺序进行排序。如何根据确定的属性值对JavaScript中的对象数组进行排序?
例子:
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
最简单的方法?
P.S.还有其他线程对对象数组进行排序,但我最常发现的是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溶液,(也许是更understable你)。
答
对于每个严重性,优先关联
EX:
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;
});
_“的优先级排序的数组,但我没有找到一个谈论排序属性值(而不是属性本身)“_ - - 如果不是_value_,你还能排序什么? – CBroe
[通过属性排序优先]的可能的复制(http://stackoverflow.com/questions/35321771/sorting-by-properties-by-priority) – baao