sort multidimensional array

by sas_sam

JavaScript

function sortMultidimensionalArray(arrayToSort, columns, orderBy) {
  var _tmpArray = arrayToSort.slice();
  
  if (typeof columns == 'undefined') {
    columns = [];
    for (var x = 0; x < _tmpArray[0].length; x++) {
      columns.push(x);
    }
  }

  if (typeof orderBy == 'undefined') {
    orderBy = [];

    for (var x = 0; x < _tmpArray[0].length; x++) {
      orderBy.push('ASC');
    }
  }

  function _multisortRecursive(a, b, columns, orderBy, index) {
    var direction = orderBy[index] === 'DESC' ? 1 : 0;

    var isNumeric = !isNaN(+a[columns[index]] - +b[columns[index]]);

    var x = isNumeric ? +a[columns[index]] : a[columns[index]].toLowerCase();
    var y = isNumeric ? +b[columns[index]] : b[columns[index]].toLowerCase();

    if (x < y) {
      return direction === 0 ? -1 : 1;
    }

    if (x === y) {
      return columns.length - 1 > index ? _multisortRecursive(a, b, columns, orderBy, index + 1) : 0;
    }

    return direction === 0 ? 1 : -1;
  }

  return _tmpArray.sort(function (a, b) {
    return _multisortRecursive(a, b, columns, orderBy, 0);
  });
}

var players = [
    {firstName: 'Jean', lastName: 'Rodrigues', points: 30},
    {firstName: 'Sara', lastName: 'Hope', points: 30},
    {firstName: 'Igor', lastName: 'Leroy', points: 25},
    {firstName: 'Foo',  lastName: 'Bar', points: 55}
];

var sortedPlayers = sortMultidimensionalArray(players, ['points', 'firstName'], ['DESC','ASC']);

console.log(players);
console.log('--------');
console.log(sortedPlayers);