Свести и различить несколько массивов в объекте - PullRequest
1 голос
/ 25 октября 2019

У меня есть следующий объект:

'1': {
   id: 1,
   ...
   tags: ['cat I', 'cat II']
 },
'2': {
   id: 2,
   tags: ['cat II', 'cat III']
 }

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

  const cats = [];
  this.courses.forEach(data => (data.tags) ? cats.push(data.tags) : '');
  return [...new Set(cats.flat())];

Это работает, но у меня такое чувствоэто способ "через верх". Он также запускается дважды, потому что он находится в вычисляемых свойствах.

Есть ли лучший способ различать и отфильтровывать категории. Может быть, дав запрос в магазин?

Ответы [ 2 ]

3 голосов
/ 25 октября 2019

Используйте Array.flatMap(), чтобы получить массив тегов. Вы можете использовать деструктуризацию и значения по умолчанию, чтобы получить свойство tags, или назначить пустой массив, если он отсутствует. Чтобы получить уникальные теги, создайте набор из массива тегов и распространите набор обратно в массив:

const data = [{"id":1,"tags":["cat I","cat II"]},{"id":2,"tags":["cat II","cat III"]},{"id":3}]

const result = [...new Set(data.flatMap(({ tags = [] }) => tags))]

console.log(result)
1 голос
/ 25 октября 2019

Вы делаете:

const courses = [{id: 1, tags: ['cat I', 'cat II ']}, {id: 2, tags: ['cat II', 'cat III']}, {id: 3}]

const tags = courses
  .reduce((a, { tags = [] }) => [...a, ...tags], [])
  .map(tag => tag.trim()) // <-- to remove extra spaces in "cat II "
  
const result = [...new Set(tags)]

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