Я использую этот код для чтения всех значений из каждого объекта с помощью ключа "category":
const listChapter = datas.map((data) => console.log(data.category))
datas - это массив объектов, и существует 45 объектов.
Проблема в том, что когда я console.log, у меня много значений дубликатов, вы можете увидеть это ниже:
Я хочу иметь одно уникальное значение для каждой категории. Как я могу это сделать?
Отфильтруйте дубликаты данных, прежде чем выполнять их повторение.
var unique = datas.reduce(function(unique, data) {
return unique.indexOf(data.category) === -1 ? unique.concat(data.category) : unique;
}, []);
Это незначительное улучшение ответа Томека. (Я еще не могу комментировать.)
const arr = [
{'category': 'Alfa'},
{'category': 'Alfa'},
{'category': 'Beta'}
];
const unique = [...new Set(arr.map(item => item.category))];
arr - весь массив.
for(var i = 0; i < data.length; i++) {
if(arr[i] == data.category) {
remove item here;
}
}
Здесь альтернативный однострочный filter()
с filter()
(просто для удовольствия):
console.log(datas.filter((data, i, a) =>
i === a.findIndex(data2 => data.category === data2.category)));
Этот подход выполняется быстрее, из-за меньших итераций:
const listChapter = Object.keys(datas.reduce((ac, el) => {
ac[el.category] = true
return ac
}, {}))
Вы также можете сделать трюк с помощью 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);