Recibo 'TypeError: no se puede leer la propiedad' categoría 'de nulo' cuando busco una matriz, no todos los elementos de la matriz tienen este campo, pero mi código solo debería verse si no es nulo, ¿no?

checkArray(array) {

    var search = 'Find this';

    var count = array.reduce(function(n, val) {
         return n + (val.outcome_status.category && val.outcome_status.category === search)

    }, 0);

    return count; 
}
4
karl 22 feb. 2018 a las 20:05

5 respuestas

La mejor respuesta

No está diciendo que falta category, está diciendo que outcome_status es nulo y está tratando de leer category de un nulo (que obviamente no existe).

La manera fácil sería también asegurarse de que val.outcome_status sea una cosa:

checkArray(array) {

    var search = 'Find this';

    var count = array.reduce(function(n, val) {
         return n + (val.outcome_status && val.outcome_status.category && val.outcome_status.category === search)

    }, 0);

    return count; 
}

Mirando su código, probablemente sería más limpio usar filter() y luego devolver la longitud del resto:

checkArray(array) {
    var search = 'Find this';

    return array.filter(val => val.outcome_status && val.outcome_status.category && val.outcome_status == search).length;
}
0
samanime 22 feb. 2018 a las 17:09

No está comprobando si el valor del estado del resultado es nulo

0
Yossi 22 feb. 2018 a las 17:09

Solo necesita agregar un cheque nulo para val.outcome_status que también podría ser nulo, lo que está dando la excepción en este caso

Para estar más seguro, también puede agregar una verificación nula adicional para val

checkArray(array) {

    var search = 'Find this';

    var count = array.reduce(function(n, val) {
         return n + (val && val.outcome_status && val.outcome_status.category && val.outcome_status.category === search)

    }, 0);

    return count; 
}
1
Shaik Mahaboob Basha 22 feb. 2018 a las 17:08

Prueba esto:

return n + (val.outcome_status && val.outcome_status.category && val.outcome_status.category === search)
0
abiudrn 22 feb. 2018 a las 17:10

No es un problema de "categoría". Muestra un error porque está intentando acceder a la clave (categoría) desde la clave de ausencia (result_status).

Por lo tanto, debe verificar si la clave existe o no

Lo harías por ‘" result_status "en val '. o agregue result_status como clave para todos los objetos, y dé un valor nulo como valor inicial.

0
godsenal 22 feb. 2018 a las 17:19