Array comparison: stringify vs iteration (v4)

Revision 4 of this benchmark created on


Setup

const generateUUID = () => (
  [1e7] + -1e3 + -4e3 + -8e3 + -1e11
).replace(
  /[018]/g, 
  c => (
    c ^ (
      crypto.getRandomValues(
        new Uint8Array(1)
      )[0] & (15 >> (c / 4))
    )
  ).toString(16)
);

const arr1 = Array.from({length: 1000}, generateUUID);

const arr2 = [...arr1];
arr2[arr2.length - 1] = generateUUID();

Test runner

Ready to run.

Testing in
TestOps/sec
via stringify
const areArraysEqual = (a1, a2) => a1.length === a2.length && JSON.stringify(a1.toSorted()) === JSON.stringify(a2.toSorted());

const hasChanged = !areArraysEqual(arr1, arr2);
ready
via every() comparison
const areArraysEqual = (a1, a2) => {
	const as1 = a1.toSorted();
	const as2 = a2.toSorted();
	
	return as1.length === as2.length && as1.every((v, i) => as2[i] === v);
}

const hasChanged = !areArraysEqual(arr1, arr2);


ready
via for comparison
const areArraysEqual = (a, b) => {
	if (a === b) return true;
	if (a.length !== b.length) return false;
	for (let i = 0; i < a.length; i++) {
		if (a[i] !== b[i]) return false;
	}
	return true;
}

const hasChanged = !areArraysEqual(arr1, arr2);
ready
via for comparison (len init)
const areArraysEqual = (a, b) => {
	if (a === b) return true;
	if (a.length !== b.length) return false;
	for (let i = 0, len = a.length; i < len; i++) {
		if (a[i] !== b[i]) return false;
	}
	return true;
}

const hasChanged = !areArraysEqual(arr1, arr2);
ready

Revisions

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