Как отсортировать массив объектов с помощью jquery или javascript
У меня есть массив объектов:
var array = [(id, name, value),(id, name, value)]; //and so on
Как получить массив для сортировки в порядке возрастания имени атрибута (array[i][1])
?
Я пытался сделать это: array[i][1].sort()
, но это не работает.
Пожалуйста, помогите мне!
Изменить: массив может содержать более двух объектов! Он может содержать сотни.
Изменить: Почему этот вопрос помечен как дубликат, когда он был задан за 2 года до "дублированного" вопроса?
6 ответов
//This will sort your array
function SortByName(a, b){
var aName = a.name.toLowerCase();
var bName = b.name.toLowerCase();
return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
}
array.sort(SortByName);
var array = [[1, "grape", 42], [2, "fruit", 9]];
array.sort(function(a, b)
{
// a and b will here be two objects from the array
// thus a[1] and b[1] will equal the names
// if they are equal, return 0 (no sorting)
if (a[1] == b[1]) { return 0; }
if (a[1] > b[1])
{
// if a should come after b, return 1
return 1;
}
else
{
// if b should come after a, return -1
return -1;
}
});
sort
Функция принимает дополнительный аргумент, функция, которая принимает два аргумента. Эта функция должна вернуть -1
, 0
или же 1
в зависимости от того, какой из двух аргументов должен стоять первым в сортировке. Больше информации
Я также исправил синтаксическую ошибку в вашем многомерном массиве.
//objects
var array = [{id:'12', name:'Smith', value:1},{id:'13', name:'Jones', value:2}];
array.sort(function(a, b){
var a1= a.name.toLower(), b1= b.name.toLower();
if(a1== b1) return 0;
return a1> b1? 1: -1;
});
//arrays
var array =[ ['12', ,'Smith',1],['13', 'Jones',2]];
array.sort(function(a, b){
var a1= a[1], b1= b[1];
if(a1== b1) return 0;
return a1> b1? 1: -1;
});
метод sort содержит необязательный аргумент для передачи пользовательской функции сравнения.
Предполагая, что вы хотите массив массивов:
var arr = [[3, "Mike", 20],[5, "Alex", 15]];
function compareName(a, b)
{
if (a[1] < b[1]) return -1;
if (a[1] > b[1]) return 1;
return 0;
}
arr.sort(compareName);
В противном случае, если вы хотите массив объектов, вы можете сделать:
function compareName(a, b)
{
if (a.name < b.name) return -1;
if (a.name > b.name) return 1;
return 0;
}
Что ж, похоже, что вместо создания настоящего многомерного массива вы создали массив (почти) объектов JavaScript. Попробуйте определить ваши массивы, как это ->
var array = [ [id,name,value], [id,name,value] ]
Надеюсь, это поможет!