Массив объектов Typescript проверяет наличие дубликатов - PullRequest
0 голосов
/ 28 мая 2020

У меня есть требование, по которому мне нужно проверять дубликаты элементов объекта.

В приведенном ниже массиве объектов мне нужно проверить «empno» ИЛИ «расширение», и если есть какие-либо дубликаты, мне нужно выдать ошибку.

Я пробовал эту ссылку на переполнение стека , но у меня это не сработало.

[
    {
        "id": 269,
        "empno": "34567",
        "extension": 345
    },
    {
        "id": 269,
        "empno": "34568",
        "extension": 346
    },
    {
        "id": 269,
        "empno": "34569",
        "extension": 345
    },
    {
        "id": 269,
        "empno": "34567",
        "extension": 345
    }
]

1 Ответ

1 голос
/ 28 мая 2020

Вы можете создать Set, чтобы обеспечить эффективный поиск существующих значений:

const hasDuplicates = (data) => {
  const set = new Set();

  for (let {empno, extension} of data) {
    const key = `${empno}/${extension}`;
    if (set.has(key)) {
      return true;
    }

    set.add(key);
  }

  return false;
};

Полный фрагмент:

const data = [{
    "id": 269,
    "empno": "34567",
    "extension": 345
  },
  {
    "id": 269,
    "empno": "34568",
    "extension": 346
  },
  {
    "id": 269,
    "empno": "34569",
    "extension": 345
  },
  {
    "id": 269,
    "empno": "34567",
    "extension": 345
  }
];

const hasDuplicates = (data) => {
  const set = new Set();
  
  for (let {empno, extension} of data) {
    const key = `${empno}/${extension}`;
    if (set.has(key)) {
      return true;
    }
    
    set.add(key);
  }
  
  return false;
};

console.log(hasDuplicates(data));

Если вы хотите что-то менее подробное за счет обработки всего массива, даже если дубликаты уже были обнаружены, вы можете уменьшить до Set и сравнить его размер с исходным массивом:

const hasDuplicates = (data) => data.length !== data.reduce((a, {empno, extension}) => a.add(`${empno}/${extension}`), new Set).size;

Полный фрагмент:

const data = [{
    "id": 269,
    "empno": "34567",
    "extension": 345
  },
  {
    "id": 269,
    "empno": "34568",
    "extension": 346
  },
  {
    "id": 269,
    "empno": "34569",
    "extension": 345
  },
  {
    "id": 269,
    "empno": "34567",
    "extension": 345
  }
];

const hasDuplicates = (data) => data.length !== data.reduce((a, {empno, extension}) => a.add(`${empno}/${extension}`), new Set).size;

console.log(hasDuplicates(data));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...