Каков наилучший способ проверить наличие объекта массива со свойством? - PullRequest
1 голос
/ 01 мая 2019

API возвращает массив объектов.

Мне нужно извлечь одно значение из первого объекта, который соответствует фильтру:

channel = booking.custom_fields.filter(f => f.id == 744)[0].value.trim()

Это работает, кроме случаев, когда фильтр соответствуетничего, массив пуст, или value==null.

Единственный способ, который я знаю об этом:

channel = 
   booking.custom_fields.filter(f => f.id == 744).length>0 &&
   booking.custom_fields.filter(f => f.id == 744)[0].value &&
   booking.custom_fields.filter(f => f.id == 744)[0].value.trim()

(который возвращает null или false, если былпроблема.)

Но это не изящно и много повторений кода.

Есть ли лучший способ?

Единственное, о чем я могу думать, это try/catch:

try { channel = booking.custom_fields.filter(f => f.id == 744)[0].value.trim() } 
catch { channel = null }

Ответы [ 2 ]

4 голосов
/ 01 мая 2019

Заранее используйте .find - не пытайтесь сложить все в одно утверждение. Если элемент найден, присвойте значение channel (иначе присвойте null channel):

const possibleItem = booking.custom_fields.find(f => f.id == 744);
const channel = possibleItem && possibleItem.value ? possibleItem.value.trim() : null;
0 голосов
/ 01 мая 2019

Я думаю, что это должен быть правильный ответ:

const channel = booking.custom_fields.some(e=>e.id==744&&e.value) ? booking.custom_fields.filter(f=>f.id==744)[0].value.trim() : null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...