JSFiddle - React, Tailwind, and code Playground

HTML

<p id="log"></p>

JavaScript

var log = (function(p) {
  return function(line) {
    p.appendChild(document.createTextNode(line));
    p.appendChild(document.createElement("br"));
  };
})(document.getElementById("log"));

// Benchmarking 3 versions at different N
for(var N = 20000; N <= 80000; N *= 2) {

var arr = (function generateData(n) {
  var result = [];
  for(var i = 0; i < n; ++i) {
    var a = i % 60;
    result.push({
      id: i,
      sex: i % 2,
      sexPref: ((i % 7) != 0) ? ((i + 1) % 2) : (i % 2),
      isSingle: (7 * i + 23) % 4 < 2,
      isAvailable: (19 * i + 53) % 8 < 2,
      // generates a number in (18, 77)
      age: ((a+5) * (a+5)) / 70 + 17.65,
    });
  }
  return result;
})(N);

function bruteforce(arr) {
  var matches = [];
  for(var i = 0; i < arr.length; ++i) {
    var candidate = arr[i], num = 12;
    var isCandidate = !candidate.isSingle && candidate.isAvailable && candidate.sex == 1;
    var cSex = candidate.sex;
    var cSexPref = candidate.sexPref;
    var cAgeMin = candidate.age - num;
    var cAgeMax = candidate.age + num;
    var result = !isCandidate ? -1 : arr.reduce(function(p,c,k,a){
      return k != i &&
        c.sex == cSexPref &&
        c.sexPref == cSex &&
        !c.isSingle && c.isAvailable &&
        c.age <= cAgeMax &&
        c.age >= cAgeMin ? k : p;
    }, -1);
    if(isCandidate)
      matches.push([i, result]);
  }
  return matches;
}

function useTheCategory(arr) {
  // some overhead for the preprocessing...
  var wmNonsingleAvailables = [];
  var wwNonsingleAvailables = [];
  var mwNonsingleAvailables = [];
  var mmNonsingleAvailables = [];
  arr.forEach(function(c) {
    // we don't care about singles and unavailables
    if(!c.isSingle && c.isAvailable) {
      if(c.sex == 0) {
        if(c.sexPref == 1)
          wmNonsingleAvailables.push(c);
        else
          wwNonsingleAvailables.push(c);
      } else {
        if(c.sexPref == 0)
          mwNonsingleAvailables.push(c);
        else
         ...