Как удалить оба дублированных значения в массиве объектов - PullRequest
0 голосов
/ 19 октября 2018

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

Пример

var array = [{
    "PassportNo": "abced",
    "Name": "John"
  },
  {
    "PassportNo": "abcederrr",
    "Name": "Johnss",

  },
  {
    "PassportNo": "abced",
    "Name": "John"

  }
];


function removeDuplicates(originalArray, objKey) {
  var trimmedArray = [];
  var values = [];
  var value;

  for (var i = 0; i < originalArray.length; i++) {
    value = originalArray[i][objKey];

    if (values.indexOf(value) === -1) {
      trimmedArray.push(originalArray[i]);
      values.push(value);
    }
  }
  return trimmedArray;
}

var noDuplicates = removeDuplicates(array, 'PassportNo');
console.log(noDuplicates);
/*
[
  {
    "PassportNo": "abced",
    "Name": "John"
  },
  {
    "PassportNo": "abcederrr",
    "Name": "Johnss"
  }
]
*/

Я хочу вот так (удалите оба значения):

[{
  "PassportNo": "abcederrr",
  "Name": "Johnss"
}]

1 Ответ

0 голосов
/ 19 октября 2018

Вы можете сделать это с помощью простого filter после сохранения счетчиков в отдельном объекте (т. Е. Выбирайте только паспорта с числом 1).

var array = [{
    "PassportNo": "abced",
    "Name": "John"
  },
  {
    "PassportNo": "abcederrr",
    "Name": "Johnss",
  },
  {
    "PassportNo": "abced",
    "Name": "John"
  }
];

var passportCounts = array.reduce((map, curr) => {
  if (curr.PassportNo in map) map[curr.PassportNo] += 1;
  else map[curr.PassportNo] = 1;
  return map;
}, {});

console.log(array.filter(p => passportCounts[p.PassportNo] === 1));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...