Сортировка массива объектов лексикографически на основе вложенного значения
Используя 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);
});
Ответ 3
Использование сравнения
arr.sort(function (a, b) {return a.name.toLowerCase() > b.name.toLowerCase()})
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String#Comparing_strings