Сортировать массив объектов лексикографически на основе вложенного значения - PullRequest
14 голосов
/ 17 декабря 2011

Используя Javascript, я хотел бы знать, как лексикографически сортировать массив объектов на основе строкового значения в каждом объекте.

Рассмотрим:

[
 {
    "name" : "bob",
    "count" : true
    "birthday" : 1972
 },
      {
    "name" : "jill",
    "count" : false
    "birthday" : 1922
 },
      {
    "name" : "Gerald",
    "count" : true
    "birthday" : 1920
 }
 ]

Как мне отсортироватьмассив в алфавитном порядке по имени?Значения имен являются именами пользователей, поэтому я хотел бы сохранить регистр букв.

Ответы [ 3 ]

30 голосов
/ 17 декабря 2011
var obj = [...];

obj.sort(function(a,b){return a.name.localeCompare(b.name); });

Имейте в виду, что это не будет учитывать капитализацию (поэтому упорядочит все имена, начинающиеся с заглавных букв, прежде чем все, начинающиеся с маленьких, т.е. "Z" < "a"), так что вы можете найти уместным добавить toUpperCase() там.

Вы также можете сделать его более общим:

function sortFactory(prop) {
   return function(a,b){ return a[prop].localeCompare(b[prop]); };
}

obj.sort(sortFactory('name')); // sort by name property
obj.sort(sortFactory('surname')); // sort by surname property

И даже более общим, если передать компаратор на завод ... ... 1009 *

3 голосов
/ 17 декабря 2011

Это сделает это:

arr.sort(function(a, b) {
    return a.name.localeCompare(b.name);
});
2 голосов
/ 17 декабря 2011

Используя сравнение

arr.sort(function (a, b) {return a.name.toLowerCase() > b.name.toLowerCase()})

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String#Comparing_strings

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...