属性数组

时间:2017-06-08 17:14:58

标签: javascript arrays

所以我有这样的用户数组看起来像这样:

[{
    userName: 'Jim',
    roles: ['Member']
}, {
    userName: 'Adam',
    roles: ['Administrator']
}, {
    userName: 'Suzy',
    roles: ['SuperUser']
}, {
    userName: 'Greg',
    roles: ['SuperUser']
}, {
    userName: 'Ady',
    roles: ['Administrator']
}, {
    userName: 'Jeremy',
    roles: ['Administrator']
}]

我想按照它的角色对这个数组进行排序。 我试过这样做:

items.sort(function (a, b) {
    var aValue = a.roles[0];
    var bValue = b.roles[0];

    if (aValue < bValue) return -1;
    if (aValue > bValue) return -1;
    return 0;
});

但它并没有达到我的预期。有谁知道如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

您可以在sort()内使用localeCompare方法进行字符串比较。

&#13;
&#13;
var data = [{"userName":"Jim","roles":["Member"]},{"userName":"Adam","roles":["Administrator"]},{"userName":"Suzy","roles":["SuperUser"]},{"userName":"Greg","roles":["SuperUser"]},{"userName":"Ady","roles":["Administrator"]},{"userName":"Jeremy","roles":["Administrator"]}]

data.sort(function(a, b) {
  return a.roles[0].localeCompare(b.roles[0])
})

console.log(data)
&#13;
&#13;
&#13;

答案 1 :(得分:0)

试一试

function SortByRole(a, b){
  var aRole = a.roles[0];
  var bRole = b.roles[0]; 
  return ((aRole < bRole) ? -1 : ((aRole > bRole) ? 1 : 0));
}

array.sort(SortByRole);