Est-il possible d'étendre la méthode intégrée array.sort() pour accepter un paramètre supplémentaire ?
Toutes les réponses ci-dessus sont bonnes, mais j'ai pensé ajouter quelques informations sur les fonctions partielles.
Pour plus d'informations, voir bind dans MDN et Fonction partielle ou John Resig - fonction partielle
Exemple du MDN :
function list() {
return Array.prototype.slice.call(arguments);
}
var list1 = list(1, 2, 3); // [1, 2, 3]
// Create a function with a preset leading argument
var leadingThirtysevenList = list.bind(undefined, 37);
var list2 = leadingThirtysevenList(); // [37]
var list3 = leadingThirtysevenList(1, 2, 3); // [37, 1, 2, 3]
Voici un exemple tiré de Fermeture de Google
goog.partial = function(fn, var_args) {
var args = Array.prototype.slice.call(arguments, 1);
return function() {
// Prepend the bound arguments to the current arguments.
var newArgs = Array.prototype.slice.call(arguments);
newArgs.unshift.apply(newArgs, args);
return fn.apply(this, newArgs);
};
};
pour utiliser cette fonction
var fn=goog.partial(numberCompare,sortField,sortDirection);
myarray.sort (fn);
var numberCompare = function (sortField,sortDirection,value1,value2){
// sort code goes here
}
0 votes
Votre exemple n'a aucun sens, car vous n'utilisez pas réellement l'option
attr
vous obtenez simplement le paramètreattr
des objets. Vous voulez probablement le changer en :array.sort(function(a, b, attr) { return a[attr] - b[attr]; }, 'name');