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>