Node js filter array со значениями реактивной формы - PullRequest
0 голосов
/ 23 июня 2019

У меня есть пробелм с фильтрующим массивом из значений формы.

Я использую угловые 7 и выражаю js

export function getItems(req: Request, res: Response) {
  const itemCriteria: ItemCriteria = req.body.itemCriteria;
  const name = (itemCriteria.name) ? itemCriteria.name : '';
  const description= (itemCriteria.description) ? 
itemCriteria.description: '';
  const category= itemCriteria.category;

  const filterItems: Item[] = items
    .filter(item=> item.category.id === category &&
               item.name .includes(name ) &&
               item.description.includes(description)
    );

  res.status(200).json(filterItems);
}

Когда я заполняю все поля, filterItems корректно, но когда я заполняютолько одно или два поля Я получил сообщение об ошибке «Не удается прочитать свойство неопределенных».Это поля из реактивной формы, но требуется только одно, иначе необязательно.Итак, мой вопрос, как я могу отфильтровать этот массив правильно?

Ответы [ 2 ]

1 голос
/ 23 июня 2019

Когда один из Criteria пуст, вам не нужно включать его в функцию фильтра.

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

const filterItems: Item[] = items
  .filter(item=> (!category || (item.category && item.category.id === category)) &&
    (!name || (item.name && item.name.includes(name))) &&
    (!description || (item.description && item.description.includes(description))
  );
0 голосов
/ 23 июня 2019

Вы пытаетесь прочитать свойство неопределенной переменной. Трудно понять, какой это, но вы можете защитить свой код от ошибок такого типа, убедившись, что переменная определена следующим образом:

const myProperty = someVariable && someVariable.someProperty

Это короткое замыкание, если некоторые переменные ложные.

В вашем случае это может выглядеть так:

const filterItems: Item[] = items
    .filter(item=> item && item.category && item.category.id === category &&
               item.name && item.name.includes(firstName) &&
               item.description && item.description.includes(lastName)
    );

(также неясно, откуда взялись firstName, lastName и элементы, но я не думаю, что это является причиной ошибки, о которой вы спрашиваете)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...