2017-03-01 108 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; 
}); 
相關問題