Как сортировать массив объектов с помощью jquery или javascript [дубликат]
этот вопрос уже есть ответ здесь:
сортировка массива объектов JavaScript
25 ответов
у меня есть массив объектов:
var array = [(id, name, value),(id, name, value)]; //and so on
как мне получить массив для сортировки в порядке возрастания имени атрибута (array[i][1])?
Я пытался сделать это: array[i][1].sort(), но это не работа.
пожалуйста, помогите мне!
изменить: массив может содержать не более двух вещей! Он может содержать сотни.
Edit:
Почему этот вопрос помечен как дубликат, когда он был задан за 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; } });The
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; });
the способ сортировки содержит необязательный аргумент для передачи пользовательской функции сравнения.
предполагая, что вы хотели массив массивов:
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] ]надеюсь, что это поможет!
Comments