¿Cuál es la mejor manera de manejar un bloque if que hace algo pero los condicionales son diferentes?
Digamos que tengo esta función en JavaScript.
const updateText1 = function (id) { const selector = $(id); selector.on('change', function () { const text = selector.val(); if(seen[text]) { // update some fields here } else { //more stuff here } }) }Pero luego necesito hacer lo mismo dentro de la declaración if pero con un condicional diferente o similar
const updateText2 = function (id) { const selector = $(id); selector.on('change', function () { const text = selector.val(); if(seen[text] || text.trim() === '') { // update some fields here } else { //more stuff here } }) }entonces otras funciones se usan así
obj1 = { test: function() { updateText1(this.id) } } obj2 = { test: function() { updateText2(this.id) } }Sé que podría combinar la lógica, pero dado que ambos objetos a los que se adjunta esta función están manejando cosas ligeramente diferentes, estoy tratando de mantener mi código SECO y no repetir el cuerpo if varias veces. He intentado inyectar la lógica de esta manera
obj2 = { // logic code here test: function() { updateText2(this.id, logic) } }Pero esto da como resultado que el código no se actualice ya que el valor se obtiene a través de jQuery en el cambio.
¿Estoy pensando demasiado en esto, debería simplemente combinar la lógica o hay una mejor manera de organizar y manejar esto?
La solución más simple es pasar una devolución de llamada, y eso es probablemente lo que estabas tratando de hacer.
Ejemplo:
const updateText = function (id, predicate) { const selector = $(id); selector.on('change', function () { const text = selector.val(); if(predicate(text)) { // update some fields here } else { //more stuff here } }) }que entonces podría llamarse de la siguiente manera
function canUpdate1(text) { return seen[text]; } function canUpdate2(text) { return seen[text] || text.trim() === ''; } updateText('id1', canUpdate1); updateText('id2', canUpdate2);