Tengo varias páginas con columnas ordenables, el código es como
var invert = $('...').val(); var column = $('...').val(); $list.children().detach().sort(function (a,b) { var aa = $(a).find('.'+column).html().trim(); var bb = $(b).find('.'+column).html().trim(); // conversions cut off return invert ? aa-bb : bb-aa; }).appendTo($list);donde columna es una clase de la columna a ordenar. Me gustaría convertirlo en una función de devolución de llamada en lugar de repetir el código
function column_sorter(a, b) { var aa = $(a).find('.'+column).html().trim(); // .... } $list.children().detach().sort(column_sorter).appendTo($list);pero la columna es inaccesible aquí (y probablemente también se invierta). ¿Hay alguna posibilidad de utilizar la función aquí?
¿Hay alguna posibilidad de utilizar la función aquí?
Tendrás que pasar esa información contextual a la función. A menudo, la forma de hacerlo es tener una función que devuelva otra función y sort llamar a la función devuelta:
function column_sorter(column/*, ...anything else it needs...*/) { return function(a, b) { var aa = $(a).find('.'+column).html().trim(); // .... }; } $list.children().detach().sort(column_sorter(column/*, ...*/)).appendTo($list); Nota al margen: si la función necesita que this se controle por sort (por lo general, no es así), probablemente la convertiría en una función de flecha:
function column_sorter(column/*, ...anything else it needs...*/) { return (a, b) => { var aa = $(a).find('.'+column).html().trim(); // .... }; } $list.children().detach().sort(column_sorter(column/*, ...*/)).appendTo($list);Es tan simple como esto
function sort_function(a, b, c) { console.log(c); return a - b; } const arr = [4, 1, 5, 3, 2]; c = "test"; arr.sort((a, b) => sort_function(a, b, c)); console.log(arr);Así que podrías usarlo como
function column_sorter(a, b, c) { var aa = $(a).find('.'+column).html().trim(); // .... } $list.children().detach().sort((a, b) => column_sorter(a, b, c)).appendTo($list);