Задать вопрос
@Adven0104

Исключить повторяющиеся объекты?

Имеется массив документов:

let docs = [
    {index:0, type: 'Word', date: '24.06'},  {index:1, type: 'Word', date: '24.06'}, 
    {index:2, type: 'Word', date: '25.06'},  {index:3, type: 'Word', date: '26.06'},
    {index:4, type: 'Excel', date: '24.06'},  {index:5, type: 'Excel', date: '24.06'}, 
    {index:6, type: 'Excel', date: '25.06'}, {index:7, type: 'Excel', date: '26.06'},
    {index:8, type: 'Another', date: '24.06'},  {index:9, type: 'Another', date: '24.06'}, 
    {index:10, type: 'Another', date: '26.06'},  {index:11, type: 'Another', date: '26.06'},
]


Нужно получить:

[
    {type: "Word", date: "24.06"}, {type: "Word", date: "26.06"}, 
    {type: "Word", date: "27.06"}, {type: "Excel", date: "24.06"}, 
    {type: "Excel", date: "25.06"}, {type: "Another", date: "24.06"}, 
    {type: "Another", date: "26.06"}
]


Можно ли найти способ реализации при помощи нативного JS?
Я пытался сделать это при помощи new Set(), но таким способом находил решение только для одного свойства:

let unique = doсs.reduce((acc, elem) => {
    return acc.add(elem.type);
}, new Set())
let createdObject = Array.from(unique).map((elem, index) => {
    let arr = {type: elem, date: elem}
    return arr
})
return createdObject


Спасибо за просмотр вопроса!
  • Вопрос задан
  • 183 просмотра
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
  • Skillfactory
    Профессия Веб-разработчик
    12 месяцев
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
Как уникализировать массив объектов по значениям нескольких свойств:

const unique = (arr, keys) =>
  arr.filter((n, i, a) => i === a.findIndex(m => keys.every(k => n[k] === m[k])));

Как на основе одного объекта создать другой, взяв из первого указанные свойства:

const pick = (obj, keys) =>
  keys.reduce((acc, k) => (acc[k] = obj[k], acc), {});

Как всё это применить в вашем случае:

const keys = [ 'type', 'date' ];
const uniqueDocs = unique(docs, keys).map(n => pick(n, keys));
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы