@gofi

Как можно удалить дубликаты из массива объектов?

Как получить массив объектов без дубликатов по значению lastname?

const arr = [
  {
     'name': 'anna',
     'lastname': 'petrova'
  },
    {
     'name': 'vika',
     'lastname': 'ivanova'
  },
    {
     'name': 'julia',
     'lastname': 'petrova'
  },
]
  • Вопрос задан
  • 7794 просмотра
Решения вопроса 3
Tim-A-2020
@Tim-A-2020
Типо так?
const obj = [{
    'name': 'anna',
    'lastname': 'petrova'
  },
  {
    'name': 'vika',
    'lastname': 'ivanova'
  },
  {
    'name': 'julia',
    'lastname': 'petrova'
  },
];

const res = obj.reduce((o, i) => {
  if (!o.find(v => v.lastname == i.lastname)) {
    o.push(i);
  }
  return o;
}, []);
console.log(res)
Ответ написан
VlasenkoFedor
@VlasenkoFedor
Программист: php, js, go
вариант решения без reduce
const arr = [{
    'name': 'anna',
    'lastname': 'petrova'
},
    {
        'name': 'vika',
        'lastname': 'ivanova'
    },
    {
        'name': 'julia',
        'lastname': 'petrova'
    },
];
const table = {};
const res = arr.filter(({lastname}) =>(!table[lastname] && (table[lastname] = 1)));
console.log(res)
Ответ написан
ruddy22
@ruddy22
Спасение утопающих — дело рук самих утопающих
// helpers start
const compose = (fn1, fn2) => x => fn1(fn2(x)); 

const reduceByProp = prop => a => 
  a.reduce((acc, curr) => ({ ...acc, [curr[prop]]: curr }), {});

const uniqByProp = prop => compose(Object.values, reduceByProp(prop));
// helpers end

// logic start
const uniqByLastname = uniqByProp('lastname')
const getUniqAndPrint = compose(console.log, uniqByLastname)
// logic end

// exec start
const arr = [
  {
     'name': 'anna',
     'lastname': 'petrova'
  },
    {
     'name': 'vika',
     'lastname': 'ivanova'
  },
    {
     'name': 'julia',
     'lastname': 'petrova'
  },
];
getUniqAndPrint(arr);
// exec end

Интерактивный пример
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы