Подтвердить что ты не робот

Общий способ сортировки массива JSON по атрибуту

Я узнал, как сортировать массив JSON на http://www.devcurry.com/2010/05/sorting-json-array.html

Теперь я хочу сортировать его в общем виде; так что моя функция сортировки знает, какой атрибут сортировать.

Например, если мой массив

[
  {
    "name": "John",
    "age": "16"
  },
  {
    "name": "Charles",
    "age": "26"
  }
]

Я хочу избежать написания разных случаев, если бы я знал, должен ли я сортировать по имени или возрасту. Я просто хочу передать параметр "имя" или "возраст", и моя функция сортировки должна знать, что делать.

Спасибо.

4b9b3361

Ответ 1

Что-то вроде:

function predicateBy(prop){
   return function(a,b){
      if (a[prop] > b[prop]){
          return 1;
      } else if(a[prop] < b[prop]){
          return -1;
      }
      return 0;
   }
}

//Usage
yourArray.sort( predicateBy("age") );
yourArray.sort( predicateBy("name") );

Ответ 2

См. этот пример http://jsfiddle.net/W8Byu/1/

Что я сделал, это сохранить столбец сортировки Name в переменной и использовать в функции сортировки.

 var sortColumnName = "Name";

 function SortByName(x,y) {
      return ((x[sortColumnName]  == y[sortColumnName]) ? 0 : ((x[sortColumnName]>    y[sortColumnName]) ? 1 : -1 ));
    }

Ответ 3

Вы можете сортировать массивы по любому полю с помощью Alasql:

var data = [{"name":"John", "age":"16"}, {"name":"Charles", "age":"26"}];

var res1 = alasql('SELECT * FROM ? ORDER BY name',[data]);
var res2 = alasql('SELECT * FROM ? ORDER BY age',[data]);
var res3 = alasql('SELECT * FROM ? ORDER BY age, name',[data]);
var res4 = alasql('SELECT * FROM ? ORDER BY age DESC, name ASC',[data]);

Попробуйте этот пример в jsFiddle.