2017-03-01 17 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.オブジェクトの配列をソートするには他のスレッドがありますが、私が大部分見つけたのはユニコードのソートであり、固定値との比較によるソートではありません。重複した質問を投稿した場合のお詫び

+0

の優先順位に基づいて配列をソート

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

を_「が、私は1つを見つけることができませんでした属性値のソートについての話です(属性自体ではありません) "_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ – CBroe

+0

[優先順位によるプロパティの並べ替え]の可能な複製(0120-385-331)//sort2- /-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、better、hm。しかし、なぜそうではありません。 –

+0

私はあなたの他の(同じ)回答をアップベートして、それらの頻繁な質問のための二重ターゲットとして使用することができます... – 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関連付ける:次に、各重症度

notificationArray.sort(function(a, b) { 
    var p1 = severity[a.severity.toLowerCase()]; 
    var p2 = severity[b.severity.toLowerCase()]; 
    return p2 - p1; 
}); 
関連する問題