Estoy tratando de convertir una representación de cadena de un operador al operador mismo en las comparaciones.
Por ejemplo, algo como
{obj1} '==' {obj2}debiera ser:
{obj1} == {obj2}O
{obj1} '!==' {obj2}debiera ser:
{obj1} !== {obj2} Puedo usar eval() , pero eso obliga a que los objetos que se comparan se conviertan en una cadena, lo que hace que las comparaciones === (comprobación de tipo estricta) sean inútiles.
Por ejemplo, en el siguiente ejemplo, eval daría resultados incorrectos:
const obj = "5" const obj2 = 5 const operator = '==='; eval(`console.log(${obj} ${operator} ${obj2})`) //outputs true, incorrect (obj is of type string, obj2 is of type number) console.log(obj === obj2) //outputs false, correct¿Cómo debo abordar esto?
posible enfoque
Una forma que se me ocurrió es simplemente pasar por la escalera if else y dejar que js maneje la comparación en lugar de analizar el operador de comparación.
Algo como
if(condition === '!=='){ return before_OrderRequest.Id !== after_OrderRequest.Id }else if (condition === '==='){ return before_OrderRequest.Id === after_OrderRequest.Id } //...more if statementsPuede definir un objeto con la representación de cadena de operadores como propiedades que devuelven una función de flecha realizando la comparación correspondiente.
const compare = { '==': (a, b) => a == b, '!=': (a, b) => a != b, '===' : (a, b) => a === b, '!==' : (a, b) => a !== b } const obj1 = 1; const obj2 = 2; console.log(compare['=='](obj1, obj2)) console.log(compare['!='](obj1, obj2)) console.log(compare['==='](obj1, obj2)) console.log(compare['!=='](obj1, obj2))