2016-03-17 55 views
0

我已檢索到的測試對象的數組:如何重新排列javascript數組中的對象?

self.tests = response.data.tests; 

測試對象組成陣列具有titlemodifiedBy字段。

是否有某種方式可以按升序重新排列數組,然後按降序修改?

+0

[排序對象數組通過字符串的屬性值在JavaScript(的可能的複製http://stackoverflow.com/questions/1129216 /在javascript中對字符串屬性值進行排序) – vidriduch

回答

3

你可以嘗試以下

self.tests.sort(function(a, b) { 
    var diff = a.title.localeCompare(b.title); 
    return diff == 0? b.modifiedBy.localeCompare(a.modifiedBy) : diff; 
}); 

var arr = [ 
 

 
    {"title" : "title1", "modifiedBy" : "david1"}, 
 
    {"title" : "title1", "modifiedBy" : "david3"}, 
 
    {"title" : "title2", "modifiedBy" : "david2"}, 
 
    {"title" : "title1", "modifiedBy" : "david2"}, 
 
    {"title" : "title2", "modifiedBy" : "david1"} 
 
] 
 

 
arr.sort(function(a, b) { 
 
    var diff = a.title.localeCompare(b.title); 
 
    return diff == 0? b.modifiedBy.localeCompare(a.modifiedBy) : diff; 
 
}); 
 

 

 
console.dir(arr);

+0

我收到一條消息,說localeCompare在類型號上不存在。請注意,我正在使用打字稿和modifiedBy是一個數字。謝謝 – Alan2

+0

@Alan - 我假設'modifiedBy'爲字符串。你需要從'b.modifiedBy.localeCompare(a.modifiedBy)'更改爲'b.modifiedBy - a.modifiedBy' – nikhil

2

如果你想在js代碼的數據進行排序,@ Nikhil的答案是偉大的。

正如我看到你的問題中有angularjs標籤,如果你想對模板中的數據進行排序,它會容易得多。這裏是尖端(與-更換+,如果在反方向想排序):

<div ng-repeat="obj in tests | orderBy: ['+title','+modifiedBy']> 
    Title: {{obj.title}} 
    Modified By: {{obj.modifiedBy}} 
</div> 
+0

這就是你如何在角度:) – nikhil

+1

@nikhil很好的技能學到了'sort'和'localeCompare ' – stanleyxu2005