展平和区分对象中的多个数组

时间:2019-10-25 07:08:44

标签: javascript arrays ecmascript-6 vuex

我有以下对象:

'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 个答案:

答案 0 :(得分:3)

使用Array.flatMap()获取标签数组。您可以使用解构和默认值来获取tags属性,或者如果缺少则分配一个空数组。要获取唯一的标签,请从标签数组中创建一个Set,然后将Set散布回数组:

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 :(得分:1)

您这样做:

bind