2017-03-01 109 views
0

所以我有此数组通知的对象,其具有在降低严重性即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排序,而不是通过与固定值进行比较来排序。如果我发布了一个重复的问题,道歉。

+0

_“的优先级排序的数组,但我没有找到一个谈论排序属性值(而不是属性本身)“_ - - 如果不是_value_,你还能排序什么? – CBroe

+0

[通过属性排序优先]的可能的复制(http://stackoverflow.com/questions/35321771/sorting-by-properties-by-priority) – baao

回答

5

你可以与严重程度的优先顺序排序对象。

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; }

+0

岂不是更好地定义排序之外'order'对象功能? – Weedoze

+0

@Weedoze,更好,嗯。但为什么不呢。 –

+0

我upvoted你的其他(下同)的答案,以便我们可以使用它作为一个欺骗的目标对于那些频繁的问题... – baao

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你)。

-1

对于每个严重性,优先关联

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; 
}); 
相关问题