Как остановить повторяющиеся значения в цикле?

1

Я использую этот код для чтения всех значений из каждого объекта с помощью ключа "category":

const listChapter = datas.map((data) => console.log(data.category))

datas - это массив объектов, и существует 45 объектов.

Проблема в том, что когда я console.log, у меня много значений дубликатов, вы можете увидеть это ниже:

Результаты console.log

Я хочу иметь одно уникальное значение для каждой категории. Как я могу это сделать?

Теги:
arrays
loops

6 ответов

1
Лучший ответ

Отфильтруйте дубликаты данных, прежде чем выполнять их повторение.

var unique = datas.reduce(function(unique, data) {
  return unique.indexOf(data.category) === -1 ? unique.concat(data.category) : unique;
}, []);
  • 0
    Это делает работу. Спасибо !
0

Это незначительное улучшение ответа Томека. (Я еще не могу комментировать.)

const arr = [
  {'category': 'Alfa'},
  {'category': 'Alfa'},
  {'category': 'Beta'}
]; 

const unique = [...new Set(arr.map(item => item.category))];
0

arr - весь массив.

for(var i = 0; i < data.length; i++) {
            if(arr[i] == data.category) {
              remove item here;
            }
          }
0

Здесь альтернативный однострочный filter() с filter() (просто для удовольствия):

console.log(datas.filter((data, i, a) =>
        i === a.findIndex(data2 => data.category === data2.category)));
0

Этот подход выполняется быстрее, из-за меньших итераций:

const listChapter = Object.keys(datas.reduce((ac, el) => {
    ac[el.category] = true
    return ac
}, {}))
0

Вы также можете сделать трюк с помощью Set:

let data = ['Alfa', 'Alfa', 'Beta', 'Gamma', 'Beta', 'Omega', 'Psi', 'Beta', 'Omega'];

let arr = [... new Set(data)];
// Or   = Array.from(new Set(data));

console.log(arr);

Edit: Я забыл, что у вас есть массив объектов. В таком случае:

let data2 = [
  {'category': 'Alfa'},
  {'category': 'Alfa'},
  {'category': 'Beta'}
]    

let set = new Set();
data2.forEach((data) => {
  set.add(data.category);
});

let arr2 = [... set];

console.log(arr2);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню