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);