-3

How should I remove duplicate objects with the condition?

suppose I have this array :

let my_array = [
  { name: "foo", version: "10" },
  { name: "foo", version: "60" },
  { name: "foo", version: "20" },
  { name: "bar", version: "400" },
];

I need to keep the object that has latest version in it from duplicates.

I know I can use Set for removing dups :

let unique = my_array.filter((set => f =>
    !set.has(f.name) && set.add(f.name)
  )
  (new Set)
)

the expected result with condition of max version is :

let my_array = [
  { name: "foo", version: "60" },
  { name: "bar", version: "400" },
];
Always Helping
  • 14,316
  • 4
  • 13
  • 29
Babak Abadkheir
  • 2,222
  • 1
  • 19
  • 46
  • 1
    Does this answer your question? [Remove duplicates from an array of objects in JavaScript](https://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript) – Liam Aug 05 '20 at 10:59
  • @Liam no . I said I need to keep the object that has latest version in it from duplicate objects beside the rest of objects . – Babak Abadkheir Aug 05 '20 at 11:10

2 Answers2

2

Use object.Values and reduce to remove duplicates and get max version of each name.

Demo

let my_array = [
  { name: "foo", version: "10" },
  { name: "foo", version: "60" },
  { name: "foo", version: "20" },
  { name: "bar", version: "400" },
];

let unique = Object.values(my_array.reduce((r, x) => {
  r[x.name] = r[x.name] && r[x.name].version > x.version ? r[x.name] : x
  return r
}, {}))

console.log(unique )
Always Helping
  • 14,316
  • 4
  • 13
  • 29
1

You can achieve the result by using reduce

let my_array = [{
    name: "foo",
    version: "10"
  },
  {
    name: "foo",
    version: "60"
  },
  {
    name: "foo",
    version: "20"
  },
  {
    name: "bar",
    version: "400"
  },
];

var new_array = my_array.reduce((max, b) => Math.max(max, b.version), my_array[0].version);

console.log(new_array)
Alexandre Elshobokshy
  • 10,720
  • 6
  • 27
  • 57