Array Partition comparasion (v2)

Revision 2 of this benchmark created on


Setup

function generateRandomRules(count) {
  const types = ["custom", "default"];
  const rules = [];

  for (let i = 0; i < count; i++) {
    const rule = {
      name: `Rule${i + 1}`,
      type: types[Math.floor(Math.random() * types.length)], // Randomly assigns "custom" or "default"
      disabled: Math.random() > 0.5 // Randomly assigns true or false
    };
    rules.push(rule);
  }

  return rules;
}

const rules = generateRandomRules(100);

Test runner

Ready to run.

Testing in
TestOps/sec
two filters
  const enabledRules = rules.filter(item => !item.disabled);
    const customRules = enabledRules.filter(item => item.type === "custom");
ready
for loop
const enabledRules = [];
  const customRules = [];

  for (let i = 0; i < rules.length; i++) {
    const rule = rules[i];
    if (!rule.disabled) {
      enabledRules.push(rule);
      if (rule.type === "custom") {
        customRules.push(rule);
      }
    }
  }
ready
partition fn
function partition(array, conditions) {
   const result = Array.from({ length: conditions.length }, () => []);

  for (let item of array) {
    for (let i = 0; i < conditions.length; i++) {
      if (conditions[i](item)) {
        result[i].push(item);
      }
    }
  }

  return result;
}

const isEnabled = x => !x.disabled
const isCustom = x => !x.disabled && x.type === "custom"
const [enabledRules, customRules] = partition(rules, [isEnabled, isCustom])
ready

Revisions

You can edit these tests or add more tests to this page by appending /edit to the URL.