Нужна помощь в написании функции для возврата пустого массива, если ключ не существует как внутри объектов внутри массива - PullRequest
0 голосов
/ 28 апреля 2020

Я работаю над безголовым приложением Shopify в Гэтсби / Реакт. Мне нужна помощь в работе с данными, которые я получаю из Shopify.

Вот пример того, как выглядят данные:

product.options = [
  {
    name: 'Size',
    values: ['S', 'M', 'L', 'XL', 'XXL'],
  },
  {
    name: 'Colour',
    values: ['Terrazzo Berry'],
  },
];

Я хочу создать переменную ключа значения для цвета.

const colours =
    product.options.find((option) => option.name.toLowerCase() === 'colour')
      .values || [];

Единственная проблема в том, что если в объекте с именем colors нет ключа, я получаю следующую ошибку:

TypeError: undefined is not an object (evaluating 'product.options.find(function (option) {
    return option.name.toLowerCase() === 'colour';
  }).values')

Может кто-нибудь помочь мне написать какой-нибудь код, который возвращает пустой объект, если ключ, который я ищу, не существует ?

1 Ответ

2 голосов
/ 28 апреля 2020

Вам необходимо установить значение по умолчанию перед доступом к .values ключу

const colours =
    (product.options.find((option) => option.name.toLowerCase() === 'colour')
      || {values: []}).values;

      // ^^^^^^^^^^^^
      // You can use whatever value you want, i've use array as default value

В чем проблема с моим кодом?

В вашем коде, если ключ не найден find функция возвращает undefined и у вас есть .values доступ к свойству, так что вы получите ошибку

...