¿Cómo detectar que un objeto de varios niveles tiene una propiedad indefinida o nula? [duplicar] -- javascript campo con lodash camp Relacionados El problema

How to detect that a multi-level object has an undefined or null property? [duplicate]


0
vote

problema

Español
Esta pregunta ya tiene respuestas aquí :
prueba de existencia de la clave de objeto JavaScript anidado (60 respuestas)
cerrado 4 años .

En muchos lugares en mi código, tengo cheques similares a la de abajo. Es muy verboso, y feo. ¿Hay algo mejor? FYI, estoy usando alboroto en todos mis proyectos, así que tengo acceso a esa poderosa biblioteca.

  output = [1,2,6,24,120] 0  
Original en ingles

In many places in my code, I have checks similar to the one below. It's very verbose, and ugly. Is there is better way? FYI, I'm using Lodash in all my projects, so I have access to that powerful library.

if (myAssessments[orderId].report &&     myAssessments[orderId].report[categoryProductCode] &&     myAssessments[orderId].report[categoryProductCode].categories &&     myAssessments[orderId].report[categoryProductCode].categories[comment.categoryId]) {      // Do something related to     // myAssessments[orderId].report[categoryProductCode].categories[comment.categoryId] } 
     
       
       

Lista de respuestas

2
 
vote
vote
La mejor respuesta
 

Desde que usa LUDASH, puede usar el método div624 :

span5

https://lodash.com/docs/4.16.6#has

o el método span6 para obtener el valor de la ruta del objeto: https://lodaash.com/docs/4.16.6#get

 

Since you use lodash, you might use the has method:

_.has(obj,[orderId, 'report', categoryProductCode, 'categories', comment.categoryId])

https://lodash.com/docs/4.16.6#has

Or the get method to get the value of the object path: https://lodash.com/docs/4.16.6#get

 
 
0
 
vote

no elegante, pero puede envolverlo intentar la captura

  span7  
 

Not elegant way but you can wrap in try catch

var result;     try{     result = myAssessments[orderId].report[categoryProductCode].categories[comment.categoryId]     }catch{}  if (result){   // do it } 
 
 
0
 
vote

Utilice la función ISSET incorporada:

  span8  
 

Use the built-in isset function:

if (isset(myAssessments[orderId].report) &&     isset(myAssessments[orderId].report[categoryProductCode]) &&     isset(myAssessments[orderId].report[categoryProductCode].categories) &&     isset(myAssessments[orderId].report[categoryProductCode].categories[comment.categoryId)]) { 
 
 
0
 
vote

Puede usar una matriz con todas las propiedades para verificar e iterar hasta que todas las propiedades se hayan marcado.

  span9  
 

You could use an array with all properties to check and iterate until all properties have been checked.

function checkProperties(object, keys) {     return keys.every(function (key) {         if (key in object) {             object = object[key];             return true;         }     }); }  // usage if (checkProperties(myAssessments, [orderId, 'report', categoryProductCode, 'categories', comment.categoryId])) {     // Do something related to     // myAssessments[orderId].report[categoryProductCode].categories[comment.categoryId] } 
 
 
0
 
vote

Tengo esta función genuic

  div0  

1er argumento es los datos principales, el segundo argumento es la matriz de propiedades que necesita para verificar y el tercer argumento verificará la longitud del último elemento que es 0 o no, lo verificará solo si el tercer argumento es cierto.

Puedes usarlo como:

  div1  
 

I have this genric function

function chckForKeyPresence(data, arr, checkLength){     var currData = data;     for(var i=0; i<arr.length; i++){         if(!currData.hasOwnProperty(arr[i]))             return false;          currData = currData[arr[i]];     }      if(checkLength)         if(currData.length==0)             return false;      return true; } 

Here 1st argument is the main data, 2nd argument is the array of properties you need to check and the third argument will check the length of the last element that it is 0 or not, it will check only if the third argument is true.

You can use it like:

if(!chckForKeyPresence(data, ["results", "tweets"], true)){     // error     return; } 
 
 

Relacionados problema

0  Lodash Transform Argumentos a través de la definición de Typescript  ( Lodash transform arguments via typescript definition ) 
Estoy trabajando con TypeScript + Lodash y quiero usar el método transforme para el alboroto Pero me he sentido con las definiciones de Typescript para es...

6  Fusión de objetos y suma una sola propiedad JavaScript  ( Merge object sum a single property javascript ) 
Tengo una matriz como esta [ { item_guid: "57e7a1cd6a3f3669dc03db58" quantity:3 }, { item_guid: "57e77b06e0566d496b51fed5" quantity:3...

0  TypeScript ignora explícitamente cualquier tipo de tipo y se trata de la variable como objeto de tipo si _.isObject () se usa en la variable, lo que provoca errores de nombre de propiedad  ( Typescript ignores explicitly stated any type and treats variable as type object ) 
Cuando tengo una variable escribiendo "cualquiera" y realice una verificación de Lodash para _.ISOBJECT, y luego intente acceder a las propiedades en la varia...

2  Manera más limpia de fusionar objetos [duplicar]  ( Cleanest way to merge objects ) 
Esta pregunta ya tiene respuestas aquí : ¿Cómo puedo combinar las propiedades de dos objetos de Java...

3  Filtro de alboroto con límite  ( Lodash filter with limit ) 
¿Hay alguna manera de filtrar los primeros elementos de una matriz que coincide con un criterio? Sé que puede filter y luego llamar take ¿Pero no pasa a...

2  Extraiga los datos del objeto utilizando una ruta: incluya todos los datos en matrices  ( Extract data from object using a path include all data in arrays ) 
Estoy tratando de resolver el siguiente problema con Lodash. Sé cómo resolver el problema usando para los bucles, pero busco el método funcional moderno para...

2  Lodash - Método que devuelve elementos que no comparten de dos matrices  ( Lodash method which return non share elements from two arrays ) 
HELO chicos, podrías ayudarlo con: Necesito un método para alboroto que devuelve: _.method( [1,2,3,4,5,6,7], [1,2,3] ) => [4,5,6,7] en otros métodos ...

16  Lodash unión de matrices de objetos  ( Lodash union of arrays of objects ) 
Me gustaría usar la función ='WorksheetName'!A2:A252 para crear una unión de dos matrices de objetos. Unión trabaja con matrices de primitivas solo como uti...

0  El complemento Heroku-Config Heroku obtiene un error de Lodash / Array al ejecutar o instalar  ( Herokus heroku config plugin gets lodash array error when running or installing ) 
Anteriormente, había instalado el complemento Heroku Toolbelt Heroku-Config y lo había estado usando para presionar y sacar los Vars de configuración de la ap...

1  Eliminar objetos similares de la matriz  ( Remove similar objects from array ) 
Estoy tratando de eliminar objetos de una matriz que tienen 4 valores idénticos y 1 único. Una búsqueda rápida de Google da muchas opciones para eliminar i...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos