Удалить дубликаты объектов из массива по имени и максимальной категории - PullRequest
0 голосов
/ 05 августа 2020

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

предположим, что у меня есть этот массив:

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

Мне нужно уберечь объект с последней версией от дубликатов.

Я знаю, что могу использовать Set для удаления дубликатов:

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

ожидаемый результат с условием максимальной версии:

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

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Используйте объект . Значения и уменьшите , чтобы удалить дубликаты и получить максимум version каждого name.

Демо

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 )
1 голос
/ 05 августа 2020

Вы можете добиться результата, используя 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...