Сортировка массива объектов лексикографически на основе вложенного значения

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

Рассмотрим:

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

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

Ответ 1

var obj = [...];

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

Помните, что это не учитывает капитализацию (поэтому он будет заказывать все имена, начинающиеся с капиталов до всех тех, которые начинаются с smalls, т.е. "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

И даже более общий, если вы передадите компаратор в factory...

Ответ 2

Это будет сделано:

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