I have an array of objects i need to sort on a custom function, since i want to do this several times on several object attributes i\'d like to pass the key name for the att
You would need to partially apply the function, e.g. using bind:
arrayOfObjects.sort(compareOn.bind(null, 'myKey'));
Or you just make compareOn
return the actual sort function, parametrized with the arguments of the outer function (as demonstrated by the others).
You may add a wrapper:
function compareOnKey(key) {
return function(a, b) {
a = parseInt(a[key], 10);
b = parseInt(b[key], 10);
if (a < b) return -1;
if (a > b) return 1;
return 0;
};
}
arrayOfObjects.sort(compareOnKey("myKey"));
const objArr = [{
name: 'Z',
age: 0
}, {
name: 'A',
age: 25
}, {
name: 'F',
age: 5
}]
const sortKey = {
name: 'name',
age: 'age'
}
const sortArr = (arr, key) => {
return arr.sort((a, b) => {
return a[key] < b[key] ? -1 : a[key] > b[key] ? 1 : 0
})
}
console.log("sortKey.name: ", sortArr(objArr, sortKey.name))
console.log("sortKey.age: ", sortArr(objArr, sortKey.age))
Yes, have the comparator returned from a generator which takes a param which is the key you want
function compareByProperty(key) {
return function (a, b) {
a = parseInt(a[key], 10);
b = parseInt(b[key], 10);
if (a < b) return -1;
if (a > b) return 1;
return 0;
};
}
arrayOfObjects.sort(compareByProperty('myKey'));
compareByProperty('myKey')
returns the function to do the comparing, which is then passed into .sort