Necesito comparar dos cadenas que provienen de dos fuentes de datos diferentes. En un sistema podrían poner la palabra y y en el otro podría ser & o podría ser al revés o podrían ser lo mismo.

Actualmente estoy usando

            if (thisAffiliation.search(new RegExp(department, "i")) > 0) {   
            validatedDepartment = true
            }

            if (thisAffiliation.search(new RegExp(department.replace('and','&'), "i")) > 0) {   
            validatedDepartment = true
             }

            if (thisAffiliation.search(new RegExp(department.replace('&','and'), "i")) > 0) {   
            validatedDepartment = true
             }

¿Hay alguna forma de combinar las tres declaraciones if en una?

Información agregada:

Necesito haber validadoDepartment = true si:

        Smith and Jones   =   Smith & Jones
        Smith and Jones   =   Smith and Jones

O si es

        Smith & Jones    =  Smith & Jones
        Smith & Jones    = Smith and Jones

No tengo control de dónde aparecen y o &

-2
user1314159 29 ago. 2020 a las 22:25

1 respuesta

La mejor respuesta

No debería tener que crear una expresión regular a partir de la cadena de entrada para esto (a menos que el valor fuente represente una expresión regular).

Para no hacer ninguna diferencia entre "y" y "&", simplemente realice la conversión en una dirección, en ambas cadenas, y hágalo siempre. Use una función para aplicar la misma lógica a ambas cadenas:

const clean = (s) => s.replace(/&/g, "and").toLowerCase();

if (clean(thisAffiliation) === clean(department)) {   
    validatedDepartment = true;
}

Si no hay otras condiciones para influir en el valor de validatedDepartment, simplemente puede asignar la condición booleana:

let validatedDepartment = clean(thisAffiliation) === clean(department);
2
trincot 29 ago. 2020 a las 20:23