Estoy tratando de comparar un valor dentro de un objeto JSON con una variable:
if (resp.userdetails.name == username) { // do something }
El problema es que no todos los objetos resp
tienen detalles de userdetails
, por lo que a veces recibo este mensaje de error:
No se pueden leer las propiedades de undefined (leyendo 'nombre')
He intentado usar ?
decir que podría ser opcional (o no existir):
if (resp.userdetails?.name == username)
Pero recibo un error de Unexpected token
en ese caso.
¿Puede alguien decirme cómo puedo actualizar mi declaración if para decir que los detalles del userdetails
pueden no estar siempre en la respuesta, pero si es así, entonces verifique que el name
sea igual al nombre de username
?
O:
if (resp.userdetails && resp.userdetails.name == username)
Si instaló lodash en su proyecto, entonces puede usar
_.get(resp,"userdetails.name")
como está documentado .
Si no ha instalado lodash, le sugiero que lo instale desde npm porque lodash es el mejor paquete de utilidades y el más utilizado.
Lodash es una biblioteca popular basada en javascript que proporciona más de 200 funciones para facilitar el desarrollo web. Proporciona funciones auxiliares como mapa, filtro, invocación, así como vinculación de funciones, plantillas de JavaScript, comprobaciones profundas de igualdad, creación de índices, etc. Lodash se puede usar directamente dentro de un navegador y también con Node.js.
Trabajar con objetos usando JavaScript puede ser bastante desafiante, específicamente si tiene que manipularlos mucho. Lodash viene con muchas características que facilitan su trabajo con objetos.
Lodash es un proyecto de código abierto y puede contribuir fácilmente a la biblioteca y agregar funciones en forma de complementos y hacer que esté disponible en GitHub y en Node.js.
Sintaxis
_.get(objeto, ruta, [valor predeterminado]) Obtiene el valor en la ruta del objeto. Si el valor resuelto no está definido, se devuelve el valor predeterminado en su lugar.
Argumentos
objeto (Objeto) - El objeto a consultar.
ruta (Array|string) - La ruta de la propiedad a obtener.
[defaultValue] (*): el valor devuelto para valores resueltos indefinidos.
Si instaló lodash en su proyecto, entonces puede usar
_.get(resp,"userdetails.name")
como está documentado .
Si no ha instalado lodash, le sugiero que lo instale desde npm porque lodash es el mejor paquete de utilidades y el más utilizado.
comando para instalar Lodash
npm install loadash
var _ = require("lodash"); var data = [ { userdetails: { name: "d" } }, {}, { userdetails: {} }, { userdetails: { name: "d" } }, ]; for (i = 0; i < data.length; i++) { var resp = data[i]; if (_.get(resp, "userdetails.name") == "d") { // if (resp.userdetails && resp.userdetails.name == "d") { use without loadlash console.log("Success"); } else { console.log("failed"); } }
Aquí loadash es súper complejo. Pero puede usar esto para evitar errores de tiempo de ejecución. Debajo de ambas expresiones se obtiene el mismo resultado.
resp.userdetails && resp.userdetails.name == "d" === _.get(resp, "userdetails.name") == "d"