Удаление дубликатов при вызове из Github API в React

У меня есть функция, в которой я вызываю список типов файлов из gist API пользователя, перебирая его (https://api.github.com/users/getify/gists):

const FileTags = ({files}) => {
  return(
    <div>
      {
          Object.keys(files).map(function (key) {
            return(
              <ul>
              <li> {files[key].language } </li>
            </ul>
            )
          })
        }
    </div>
  );
} 

Я могу успешно вызвать список языков, но в списке много дубликатов, например:

Уценка Уценка JavaScript JavaScript JavaScript JavaScript JavaScript

Как отфильтровать уникальные языки, чтобы они не повторялись, например "Markdown Javascript" ?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
130
1

Ответы 1

Может быть, примерно так:

const FileTags = ( {files } ) =>
    <div>
      <ul>
      {
          [...new Set(Object.keys(files).map(key => files[key].language))]
            .map( el => <li>{el}</li>)
      }
      </ul>
</div>

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set

The Set object lets you store unique values of any type, whether primitive values or object references.

Простите, не вижу разницы. Я пробовал это, но все еще получаю повторяющиеся значения

jsnoobie 31.05.2018 03:42

Разве ваша переменная файлов не является объектом объектов? Вот рабочий пример: codeandbox.io/s/n8v95l5xj Если ваши условия другие, вы можете изменить код в соответствии с этим. Но, в конце концов, вы должны каким-то образом получить уникальные значения.

devserkan 31.05.2018 03:54

Я пробовал в своем проекте, и это не сработало :( Когда я использую api.github.com/users/getify/gists, у него несколько языков, и все дубликаты появляются. Код работает в моем Filetag, но на моей главной странице, где я отображаю данные, если я изменяю параметры, я получаю сообщение об ошибке. В настоящее время я называю это так: {users.map ((user, i) => {return <FileTags files = {users [i] .files} />})} это, возможно, что-то сделать здесь? Извините, я новичок в React

jsnoobie 31.05.2018 04:30

Не нужно извиняться, но было бы лучше добавить другие части вашего кода. Вы даже можете использовать codeanbox, если это не проблема. Но ради качества вашего вопроса более важно добавить связанные части кода. Codesandbox не является обязательным. Я иду спать, но это поможет другим, кто захочет помочь тебе.

devserkan 31.05.2018 04:35

Спасибо за помощь. Если вы все еще наверху, вот моя песочница: codeandbox.io/s/x7n4korjpo Когда вы ищете "getify" в index.js, вы видите средний столбец, в котором я столкнулся с проблемой.

jsnoobie 31.05.2018 04:45

ОК. Здесь вы извлекаете сущность пользователя, а не на самом деле пользователей. У вас есть куча существенной информации (все объекты), и есть объект "files", содержащий некоторую информацию об этих сущностях. Есть файлы * .md и есть информация о языке. Мой код действительно работает, но только для одного смысла. Если вы внимательно посмотрите страницу, то увидите несколько ul. Это потому, что вы отображаете все суть. Для каждой сути мое предложение работает, в каждом "ul" мы очищаем дубликаты. Но поскольку мы не делаем этого для других объектов gist, вы видите дубликаты в других ul.

devserkan 31.05.2018 20:32

Здесь у вас есть несколько вариантов. Вы можете как-то извлечь и объединить все «файлы» перед отправкой FileTags (без карты). Или после сопоставления и передачи в FileTags вы можете объединить и удалить там дубликаты.

devserkan 31.05.2018 20:33

Другие вопросы по теме