JSFiddle - React, Tailwind, and code Playground

JavaScript

const mismatches = (records) => {
  const obj = {};
  const notExited = [];
  const notEntered = [];
  for (const [name, state] of records) {
    if (!(name in obj)) {
      obj[name] = 0;
    }

    if (state === 'enter') {
      obj[name]++;
    } else {
      obj[name]--;
    }

    if (obj[name] > 1) {
      if (!notExited.includes(name)) {
        notExited.push(name);
      }
      obj[name] = 0;
    }
    if (obj[name] < 0) {
      if (!notEntered.includes(name)) {
        notEntered.push(name);
      }
      obj[name] = 0;
    }
  }

  for (const [key, val] of Object.entries(obj)) {
    if (val === 1) {
      if (!notExited.includes(key)) {
        notExited.push(key);
      }
    }
  }
  return [notExited, notEntered];
};

console.log(mismatches([
    ["Martha", "exit"],
    ["Paul", "enter"],
    ["Martha", "enter"],
    ["Steve", "enter"],
    ["Martha", "exit"],
    ["Jennifer", "enter"],
    ["Paul", "enter"],
    ["Curtis", "exit"],
    ["Curtis", "enter"],
    ["Paul", "exit"],
    ["Martha", "enter"],
    ["Martha", "exit"],
    ["Jennifer", "exit"],
    ["Paul", "enter"],
    ["Paul", "enter"],
    ["Martha", "exit"],
    ["Paul", "enter"],
    ["Paul", "enter"],
    ["Paul", "exit"],
    ["Paul", "exit"]
  ]),
  mismatches([
    ["Paul", "enter"],
    ["Paul", "exit"]
  ]),
  mismatches([
    ["Paul", "enter"],
    ["Paul", "enter"],
    ["Paul", "exit"],
    ["Paul", "exit"],
  ]),
  mismatches([
    ["Paul", "enter"],
    ["Paul", "exit"],
    ["Paul", "exit"],
    ["Paul", "enter"],
  ]));