Задать вопрос
@khiukv
Учусь на веб разработчика

Как удалить из массива объектов элементы с повторяющимся значением свойства?

Необходимо удалить из массива объектов все элементы у которых значения определённого свойства не являются уникальными. Но в моём случае мне нужно удалить также и первый объект, который затем повторяется. Поясню на примере ниже:

let data = [
  {name:"Joe", date:'2018-07-01', amt:250 },
  {name:"Mars", date:'2018-07-01', amt:250 },
  {name:"Joe", date:'2018-07-02', amt:250 },
  {name:"Saturn", date:'2018-07-01', amt:250 },
  {name:"Joe", date:'2018-07-02', amt:250 },
  {name:"Jupiter", date:'2018-07-01', amt:250 },
]
let resArr = [];
data.filter(function(item){
    let i = resArr.findIndex(x => (x.name == item.name));
     if(i <= -1){
           resArr.push(item);
      }
   return null;
});
console.log(resArr)

В результате выполнения кода элементы имеющие значение свойства name "Joe" будут удалены, но первый элемент имеющий name "Joe" останется, мне же нужно, чтобы в случае если name: "Joe" повторяется ещё хотя бы раз, то удаляются все элементы с таким значением, включая и самый первый. Т.е. в итоговом массиве не должно быть ни одного элемента с name:"Joe".

Я также пытался реализовать это с помощью кода ниже, но результат получается всё тот же:

let unique = data.reduce((acc, item) => acc.map[item.budgetid] ? acc : ((acc.map[item.budgetid] = true), acc.unique.push(item), acc), {
    map: {},
    unique: []
}).unique;
  • Вопрос задан
  • 271 просмотр
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 2
SilenceOfWinter
@SilenceOfWinter
та еще зажигалка...
arr = arr.filter((value, index) => arr.indexOf(value) === index);
Ответ написан
Комментировать
@WAR_VIK
Вот так:
let res = arr.filter((value, index) => arr.indexOf(value) === index && arr.lastIndexOf(value) === index);
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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