Javascript удаляет объекты массива с дублированными свойствами, сохраняя последние обновления - PullRequest
0 голосов
/ 13 марта 2019

Я много искал для этого, но не смог найти ничего, что соответствовало бы моему требованию.

Я хочу удалить все дубликаты, но сохраняю последнюю запись не первой.

Массив уже предварительно отсортирован. Я не хочу связываться с сортировкой

Так это выглядит так:

[{
    name:"Joe",
    status:"foo1" },
  {
    name:"Joe",
    status:"foo2"},
  {
     name:"Vani",
    status:"foo5"
  }]

Ожидаемый результат выглядит следующим образом:

  [{
    name:"Joe",
    status:"foo2"},
  {
     name:"Vani",
    status:"foo5"
  }]

Буду благодарен, если кто-нибудь сможет мне помочь!

Ответы [ 3 ]

4 голосов
/ 13 марта 2019

Вы можете просто использовать уменьшить

let arr = [{ name:"Joe", status:"foo1" }, { name:"Joe", status:"foo2"}, { name:"Vani", status:"foo5" }]

let op = arr.reduce((op,inp)=>{
  op[inp.name] = inp
  return op
},{})

console.log(Object.values(op))
1 голос
/ 13 марта 2019

Вы можете использовать ES6 Map. Начиная с Документы :

Объект Map содержит пары ключ-значение и запоминает исходный порядок вставки ключей. Любое значение (как объекты, так и примитивные значения) может использоваться в качестве ключа или значения.

const data = [
  { name:"Joe", status:"foo1" },
  { name:"Joe", status:"foo2" },
  { name:"Vani", status:"foo5" }
];

const removeDupes = (arr, map = new Map()) => {
  arr.forEach(o => map.set(o.name, o));

  return [...map.values()];
};

console.log(removeDupes(data));
.as-console-wrapper { max-height: 100% !important; top: 0; }
0 голосов
/ 13 марта 2019

Попробуйте использовать простые forEach,

const arr = [{ name:"Joe", status:"foo1" }, { name:"Joe", status:"foo2"}, { 
    name:"Vani", status:"foo5" }];

let result = {};
arr.forEach((val) => { result[val.name] = val; });

console.log(Object.values(result));

Надеюсь, это поможет ...

...