La función _.filter no funciona con la función construida _.partialRight , pero funciona con una función personalizada. Vea el siguiente ejemplo:
import _ from 'lodash'; const students = [ {firstName: "Mary"}, {firstName: "Jane"}, {firstName: "John"}, ]; function firstNameStartsWith(student, letter) { return _.startsWith(student.firstName, letter); } _.filter(students, _.partialRight(firstNameStartsWith, "J")); // [] _.filter(students, student => firstNameStartsWith(student, "J")); // [ { firstName: 'Jane' }, { firstName: 'John' } ]¿Alguien puede explicar por qué?
La función _.filter() pasa 3 parámetros al predicado: value , index y la matriz original. El index anula el valor aplicado parcialmente y obtiene un resultado incorrecto. Esto sucede porque "los argumentos aplicados parcialmente se agregan a los argumentos que recibe". Puede solucionar esto limitando la función aplicada parcialmente a un solo parámetro usando _.unary() :
const students = [ {firstName: "Mary"}, {firstName: "Jane"}, {firstName: "John"}, ]; function firstNameStartsWith(student, letter) { return _.startsWith(student.firstName, letter); } const result = _.filter(students, _.unary(_.partialRight(firstNameStartsWith, "J"))); console.log(result); <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js" integrity="sha512-WFN04846sdKMIP5LKNphMaWzU7YpMyCU245etK3g/2ARYbPK9Ub18eG+ljU96qKRCWh+quCY7yefSmlkQw1ANQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>