有個對象數組排序功能需求铭腕,需要對這個數組元素對象里頭的兩個字段進行判斷器钟。最直觀想法是循環(huán)第一次判斷第一個字段得到的新數組斑司,再去循環(huán)這個新數組再判斷第二個字段谴餐。這種方式邏輯直觀姻政,但是循環(huán)次數多,而且代碼量也大岂嗓。后來發(fā)現了
sort()
方法汁展。
具體需求:
- 在線狀態(tài)的排在前面,離線的在后面
- 在滿足狀態(tài)排序后databases字段長度按照小到大排序
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
var datas = [
{
"status": "離線",
"children": [1,2,3]
},
{
"status": "在線",
"children": [1,2,3]
},
{
"status": "離線",
"children": [1,5,6,8]
},
{
"status": "離線",
"children": [2,3]
},
{
"status": "在線",
"children": [1]
}
];
function sortBy2Key(datas){
datas.sort(function(a, b){
// 狀態(tài):中文轉換成數字比較厌殉,期望放在前面的使用小的數字食绿。
let statusA = a.status === '在線' ? 0 : 1;
let statusB = b.status === '在線' ? 0 : 1;
let lenA = a.children.length;
let lenB = b.children.length;
return statusA - statusB || lenA - lenB;
});
}
sortBy2Key(datas);
console.log(datas);
</script>
</body>
</html>
sort應該也能比較中文,應該是按照漢字編碼數值來公罕,具體還沒有翻文檔和測試下器紧。但在本次案例種,還是得轉換成期望比較順序的數值楼眷。