Test (v2)

Revision 2 of this benchmark created on


Setup

function isEqual(obj1, obj2) {
    return JSON.stringify(obj1) === JSON.stringify(obj2);
}

const mapFromColors = new Map();
const uniqueSet = new Set();
const uniqueArraySet = new Set();

function generateHash(inputString) {
    let hash = 0;

    for (let i = 0; i < inputString.length; i++) {
        const char = inputString.charCodeAt(i);
        hash = ((hash << 5) - hash) + char;
        hash |= 0; // Convert to 32bit integer using bitwise OR
    }

    return hash;
}

// Example array with duplicate objects
const arrayWithDuplicates = [
  {
    "id": 1,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 2,
    "name": "Bob",
    "details": {
      "age": 25,
      "city": "Los Angeles"
    }
  },
  {
    "id": 3,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 4,
    "name": "Charlie",
    "details": {
      "age": 35,
      "city": "Chicago"
    }
  },
{
    "id": 1,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 2,
    "name": "Bob",
    "details": {
      "age": 25,
      "city": "Los Angeles"
    }
  },
  {
    "id": 3,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 2,
    "name": "Bob",
    "details": {
      "age": 25,
      "city": "Los Angeles"
    }
  },
  {
    "id": 3,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 2,
    "name": "Bob",
    "details": {
      "age": 25,
      "city": "Los Angeles"
    }
  },
  {
    "id": 3,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 8,
    "name": "Bobb",
    "details": {
      "age": 25,
      "city": "Los Angeles"
    }
  },
  {
    "id": 9,
    "name": "Alicee",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 4,
    "name": "Charlie",
    "details": {
      "age": 35,
      "city": "Chicago"
    }
  },
{
    "id": 1,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 2,
    "name": "Bob",
    "details": {
      "age": 25,
      "city": "Los Angeles"
    }
  },
  {
    "id": 3,
    "name": "Alice",
    "details": {
      "age": 30,
      "city": "New York"
    }
  },
  {
    "id": 4,
    "name": "Charliee",
    "details": {
      "age": 35,
      "city": "Chicago"
    }
  }
];

Test runner

Ready to run.

Testing in
TestOps/sec
Filter
const uniqueArray = arrayWithDuplicates.filter((item, index, self) =>
    index === self.findIndex((t) => (
        isEqual(t, item)
    ))
);
ready
For
const uniqueArray = []
for (let i = 0; i < arrayWithDuplicates.length; i++) {
	const index = arrayWithDuplicates.findIndex((t) => isEqual(t, arrayWithDuplicates[i]))
	if (i === index) {
		uniqueArray.push(arrayWithDuplicates[i])
	}
}
ready
Map
const mapFromColorss = new Map(
  arrayWithDuplicates.map(c => [generateHash(JSON.stringify(c)), c])
);
const uniqueArray = [...mapFromColorss.values()];
ready
For map
for (let i = 0; i < arrayWithDuplicates.length; i++){
  
const a = arrayWithDuplicates[i];
mapFromColors.set(generateHash(JSON.stringify(a)), a);
}
const uniqueArray = [...mapFromColors.values()];
ready
Optimized
for (let i = 0; i < arrayWithDuplicates.length; i++) {
    const a = arrayWithDuplicates[i];
    const hash = generateHash(JSON.stringify(a));

    if (!uniqueSet.has(hash)) {
        uniqueSet.add(hash);
        mapFromColors.set(hash, a);
    }
}

const uniqueArray = [...mapFromColors.values()];
ready
Set
for (let i = 0; i < arrayWithDuplicates.length; i++) {
    uniqueArraySet.add(JSON.stringify(arrayWithDuplicates[i]))
}

const uniqueArray = []
for (const item of uniqueArraySet) {
	uniqueArray.push(JSON.parse(item))
}
ready
Opimized Set
const uniqueArray = []

for (let i = 0; i < arrayWithDuplicates.length; i++) {
	const b = arrayWithDuplicates[i]
	const a = JSON.stringify(b)
  if (!uniqueArraySet.has(a)) {
  	uniqueArraySet.add(a)
  	uniqueArray.push(b)
  }
}
ready

Revisions

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