programing

오브젝트 내의 여러 어레이를 평탄화 및 구별

sourcejob 2022. 10. 14. 21:40
반응형

오브젝트 내의 여러 어레이를 평탄화 및 구별

다음과 같은 대상이 있습니다.

'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())];

그것은 효과가 있지만 나는 이것이 "과도한" 방법이라는 느낌이 든다.계산된 속성에 있기 때문에 두 번 실행됩니다.

카테고리를 구별하고 걸러낼 수 있는 다른 방법이 있습니까?가게에 문의해서라도?

사용하다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)

다음 작업을 수행합니다.

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)

언급URL : https://stackoverflow.com/questions/58553806/flatten-and-distinct-multiple-arrays-in-an-object

반응형