#javascript
var a = {prop: 3, name: 'a'}, b = {prop: 2, name: 'b'}, c = {prop: 1, name: 'c'}; var array = [ a, b, c ], result = null; result = array.sort(function(a, b){ var c = a.prop, d = b.prop; if( c < b ){ return -1; }else if( c > b ){ return 1; } return 0; }); for(var i in result){ console.log(result[i].name); // a, b, c } Так не работает... Добавлено: А в js так нельзя сортировать?? А какая разница сорту, что двигать местами?
Ответы
Ответ 1
У вас две ошибки: Метод sort сортирует массив на месте, т.е. изменяет массив, к которому он применен. Если вы хотите сохранить исходный массив, сделайте копию перед сортировкой: result = array.slice().sort() Вы используете b в сравнениях (c < b) и (c > b), хотя хотели d. Исправленная программа работает как надо.Ответ 2
В принципе многомерные сортировки решаются с помощью написания сложных функций для sort(), но это сложно, поэтому можно воспользоваться какой-нибудь библиотекой, например, эта функция может быть реализована с помощью библиотеки Alasql, которая предназначена для обработки массивов как в SQL. var a = {prop: 3, name: 'a'}, b = {prop: 2, name: 'b'}, c = {prop: 1, name: 'c'}; var array = [ a, b, c ]; var result = alasql('SELECT * FROM ? ORDER BY name',[array]); Порядок и количество полей можно варьировать с помощью ключевых слов ASC (по возрастанию)/DESC (по убыванию), например, так: var result = alasql('SELECT * FROM ? ORDER BY name DESC, prop ASC',[array]); Ваш пример на jsFiddle.Ответ 3
var a = {prop: 3, name: 'a'}, b = {prop: 2, name: 'b'}, c = {prop: 1, name: 'c'}, array = [ a, b, c ]; for (var i=0; i < array.sort(function(obj1, obj2){ return obj1.prop-obj2.prop; }).length; i++) { console.log(array[i].prop); }
Комментариев нет:
Отправить комментарий