I need to sort an array of objects providing a dictionary with keys and their order. Similar:
var data = [
{ "name": "a", "age": 1, "money": 4 },
{ "name": "f", "age": 4, "money": 1 },
{ "name": "c", "age": 2, "money": 3 },
{ "name": "a", "age": 0, "money": 1},
{ "name": "f", "age": 4, "money": 3 },
{ "name": "c", "age": 1, "money": 4 },
{ "name": "c", "age": 3, "money": 1 }
];
var data = data.multiSort({
name: "asc",
age: "desc",
money: "desc"
});
console.log(data);
/*
{ "name": "a", "age": 1, "money": 4 },
{ "name": "a", "age": 0, "money": 1},
{ "name": "c", "age": 3, "money": 1 }
{ "name": "c", "age": 2, "money": 3 },
{ "name": "c", "age": 1, "money": 4 },
{ "name": "f", "age": 4, "money": 3 },
{ "name": "f", "age": 4, "money": 1 }
*/
I am completely stuck, and I do not understand how to achieve this. Many people point to this simple piece of code, but I donβt understand how it should achieve what I am trying to do.
https://github.com/Teun/thenBy.js
This is the code that I have right now. I know that I'm quite far from a solution, but I would appreciate any help to figure out how to get there, since I need to improve a lot on javascript.
Array.prototype.multiSort = function(sorters){
function getNextSorter(sorters, currentSorterKey) {
var sortersKeys = Object.keys(sorters);
if(!currentSorterKey)
currentSorterIndex = 0;
else
currentSorterIndex = sortersKeys.indexOf(currentSorterKey) + 1;
var key = sortersKeys[currentSorterIndex];
var order = sorters[key];
}
function compare(a, b, key, order) {
var a = a[key];
var b = b[key];
var numericA = parseFloat(a);
var numericB = parseFloat(b);
if(!isNaN(numericA) && !isNaN(numericB)) {
a = numericA;
b = numericB;
}
if(a != b)
return (order == "asc") ? a - b : b - a;
else
}
return this;
};