javascript новый массив без дубликатов - PullRequest
1 голос
/ 06 мая 2020

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

Я хочу создать массив без дубликатов. Вы можете мне помочь?

useEffect(() => {
    allBands.forEach(band => {
        if(!availableGenres.includes(band.bandGenre)){
            setAvailableGenres(genres => [...genres, band.bandGenre])  
        }
    })
}, [allBands])

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Если я правильно понимаю вашу структуру данных, вы можете попробовать это.

useEffect(() => {
  setAvailableGenres(genres => [
    ...genres, 
    ...allBands.map(band => band.bandGenre).filter(bandGenre => !genres.includes(bandGenre))
])}, [allBands])
0 голосов
/ 06 мая 2020

Я мог бы рекомендовать использовать встроенный объект Set для отслеживания уникальных жанров. Как только ваш Set будет иметь все жанры, вы можете использовать оператор распространения (...), чтобы преобразовать его обратно в массив и установить доступные жанры.

useEffect(() => {
  const genres = new Set();
  allBands.forEach(band => {
    genres.add(band.bandGenre);
  })
  setAvailableGenres([...genres]);
}, [allBands])
...