Я получаю 'TypeError: Невозможно прочитать свойство' category 'из null' при поиске в массиве, не у всех элементов в массиве есть это поле, но мой код должен выглядеть, только если он не нулевой, нет?

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 Фев 2018 в 20:05

5 ответов

Лучший ответ

Он не говорит о том, что category отсутствует, он говорит о том, что outcome_status равен нулю, и пытается прочитать category с нуля (которого, очевидно, не существует).

Самый простой способ - это убедиться, что val.outcome_status - вещь:

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; 
}

Глядя на ваш код, было бы, вероятно, лучше использовать filter() и затем возвращать длину оставшегося:

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 Фев 2018 в 17:09

Вы не проверяете, имеет ли значение value.outcome значение null

0
Yossi 22 Фев 2018 в 17:09

Вам просто нужно добавить нулевую проверку для val.outcome_status , которая также может быть нулевой, что в данном случае дает исключение

Чтобы быть в безопасности, вы также можете добавить дополнительную нулевую проверку для 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 Фев 2018 в 17:08

Попробуй это:

return n + (val.outcome_status && val.outcome_status.category && val.outcome_status.category === search)
0
abiudrn 22 Фев 2018 в 17:10

Это не проблема "категории". Он показывает ошибку, потому что вы пытаетесь получить доступ к ключу (категории) из ключа неэкспонента (конечный_статус).

Таким образом, вы должны проверить, существует ли ключ или нет

Вы бы сделали это с помощью outcome "result_status" в val '. или добавьте result_status в качестве ключа ко всему объекту и укажите нулевое значение в качестве начального значения.

0
godsenal 22 Фев 2018 в 17:19