Игнорировать нулевые значения при использовании .find () - PullRequest
1 голос
/ 20 мая 2019

Я использую метод javascript .find () для поиска значений в моем массиве. Я получаю следующую ошибку: Uncaught TypeError: Cannot read property 'toUpperCase' of null, которая происходит в этой строке: if (this.collection.find(x => x.details.numb.toUpperCase() === numb)) {

Я считаю, что эта ошибка происходит, потому что в x.details.numb есть нулевые значения. Можно ли игнорировать нулевые значения из этой строки кода? Или мне придется переделать мой массив без нулевых значений?

Ответы [ 4 ]

1 голос
/ 20 мая 2019

Поскольку вы находитесь в условии, вы можете использовать some вместо find, поскольку some останавливается после выполнения условия (что приводит к повышению производительности):

this.collection
  .some(item => item && item.details && items.details.numb.toUpperCase() === numb)

Как показано диким комментатором, вы также можете предотвратить появление неопределенных значений как таковых:

this.collection
  .some(item => item 
    && item.details 
    && items.details.numb
    && ![undefined, null].includes(items.details.numb)
    items.details.numb.toUpperCase() === numb)
1 голос
/ 20 мая 2019

Вы можете проверить наличие нулевых значений перед вызовом toUpperCase

if (this.collection.find(x => x.details && x.details.numb && x.details.numb.toUpperCase() === numb)) {

Как отметил @VLAZ в комментариях, это не удастся для numb === '', в этом случае вы можете использовать

(x.details && x.details.numb || '' ).toUpperCase() === numb
1 голос
/ 20 мая 2019

Просто используйте чек для null, а также toUpperCase:

this.colleciton.find(x => x.details != null && x.details.numb != null && x.details.numb.toUpperCase && x.details.numb.toUpperCase() === numb)
1 голос
/ 20 мая 2019

Конечно!

x.details && x.details.numb && x.details.numb.toUpperCase() === numb
...