Одним из способов решения таких проблем является временное сворачивание моего списка в объект с ключами, состоящими из важных частей объекта, и значениями (в данном случае), являющимися существующим результатом, если он есть, или текущим. Это просто reduce
Тогда я просто беру значения этого объекта, игнорируя ключи, используя Object .values
.
Вот один из подходов:
const dedupe = data => Object .values (data .reduce ((
a, entry, _, __,
key = `${entry .entityId} | ${entry .selectedColumn} | ${entry .selectedColumns}`
) => ({...a, [key]: a [key] || entry}), {}))
const DATA = [{wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "WAYZETTA 67-2536H", entityId: 31135395, selectedColumn: "Mar", selectedColumns: "Mar"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Jan", selectedColumns: "Jan Feb"}, {wellName: "MARYS DRAW 461-2227H", entityId: 31340479, selectedColumn: "Feb", selectedColumns: "Jan Feb"}];
console .log (dedupe (DATA))
Исходя из данных, я предполагаю, что нам нужно сопоставлять только на entityId
, что wellName
и entityId
всегда коррелированы. Если это неверно, достаточно легко добавить имя скважины к ключу.
Единственный немного хитрый бит в этом коде - это присвоение key
внутри параметров для reduce
. Мне нравится этот подход, поскольку он делает мое тело функции единым выражением. Но здесь, в обратном вызове reduce
, это немного неловко из-за третьего и четвертого аргументов (индекс и массив), которые reduce
предоставляет вам. Я просто игнорирую их, предоставляя неиспользуемые параметры _
и __
. Но это могут быть i
и arr
или что-то еще.