Find unique array values (v6)

Revision 6 of this benchmark created on


Setup

/* 
  Array of 535 players, 119 are uniques.
  Generated with ChatGPT
*/


const players = ["Ronaldo", "Messi", "Neymar", "Lewandowski", "De Bruyne", "Mbappé", "Haaland", "Kane", "Salah", "Benzema", "Modric", "Mané", "Firmino", "Sterling", "Foden", "Silva", "Kimmich", "Gnabry", "Neuer", "Dias", "Fernandes", "Rashford", "Van Dijk", "Alisson", "Robertson", "Alexander-Arnold", "Henderson", "Thiago", "Müller", "Sané", "Goretzka", "Hummels", "Reus", "Werner", "Havertz", "Kanté", "Ziyech", "Mount", "Chilwell", "Lukaku", "Immobile", "Insigne", "Mertens", "Hazard", "Asensio", "Casemiro", "Isco", "Kroos", "Courtois", "Bale", "Benzia", "Alba", "Busquets", "De Jong", "Lenglet", "Pedri", "Dest", "Piqué", "Fati", "Ter Stegen", "Aubameyang", "Özil", "Lacazette", "Partey", "Ramsdale", "Xhaka", "Bellerín", "Tierney", "McTominay", "Fernandez", "Almiron", "Salisu", "Ward-Prowse", "Ings", "Adams", "Bertrand", "Højbjerg", "Kane", "Son", "Lloris", "Reguilón", "Rodri", "Dzeko", "Pellegrini", "Ibrahimovic", "Kessié", "Donnarumma", "Roma", "Lazzari", "Lukaku", "Eriksen", "Immobile", "Milinković-Savić", "Vidal", "Džemaili", "Chiellini", "Dybala", "Morata", "Cuadrado", "Kulusevski", "Lautaro", "Hakimi", "Barella", "Skriniar", "Handanović", "Laporte", "García", "Mahrez", "Bernardo", "Jesus", "Ederson", "Cancelo", "Dias", "Gündoğan", "Torres", "Fernandinho", "Stones", "Mendy", "Rodrigo", "Neto", "Fati", "Coutinho", "Pjanic", "Busquets", "Trincão", "Roberto", "Dest", "Umtiti", "Braithwaite", "Ter Stegen", "Griezmann", "Messi", "Ramos", "Benzema", "Kroos", "Casemiro", "Modric", "Mendy", "Courtois", "Hazard", "Valverde", "Vázquez", "Asensio", "Varane", "Carvajal", "Nacho", "Isco", "Jovic", "Militao", "Vinícius", "Marcelo", "Alaba", "Lewandowski", "Neuer", "Kimmich", "Gnabry", "Müller", "Sané", "Goretzka", "Hummels", "Reus", "Werner", "Havertz", "Kanté", "Ziyech", "Mount", "Chilwell", "Lukaku", "Immobile", "Insigne", "Mertens", "Hazard", "Asensio", "Casemiro", "Isco", "Kroos", "Courtois", "Bale", "Benzia", "Alba", "Busquets", "De Jong", "Lenglet", "Pedri", "Dest", "Piqué", "Fati", "Ter Stegen", "Aubameyang", "Özil", "Lacazette", "Partey", "Ramsdale", "Xhaka", "Bellerín", "Tierney", "McTominay", "Fernandez", "Almiron", "Salisu", "Ward-Prowse", "Ings", "Adams", "Bertrand", "Højbjerg", "Kane", "Son", "Lloris", "Reguilón", "Rodri", "Dzeko", "Pellegrini", "Ibrahimovic", "Kessié", "Donnarumma", "Roma", "Lazzari", "Lukaku", "Eriksen", "Immobile", "Milinković-Savić", "Vidal", "Džemaili", "Chiellini", "Dybala", "Morata", "Cuadrado", "Kulusevski", "Lautaro", "Hakimi", "Barella", "Skriniar", "Handanović", "Laporte", "García", "Mahrez", "Bernardo", "Jesus", "Ederson", "Cancelo", "Dias", "Gündoğan", "Torres", "Fernandinho", "Stones", "Mendy", "Rodrigo", "Neto", "Fati", "Coutinho", "Pjanic", "Busquets", "Trincão", "Roberto", "Dest", "Umtiti", "Braithwaite", "Ter Stegen", "Mbappé", "Neymar", "Di María", "Navas", "Paredes", "Marquinhos", "Verratti", "Herrera", "Danilo", "Kean", "Florenzi", "Draxler", "Diallo", "Kimpembe", "Icardi", "Mendy", "Sterling", "De Bruyne", "Grealish", "Mahrez", "Foden", "Rodri", "Cancelo", "Stones", "Dias", "Ederson", "Gundogan", "Bernardo", "Aguero", "Silva", "Zinchenko", "Walker", "Jesus", "Laporte", "Martial", "Rashford", "Fernandes", "Pogba", "Greenwood", "Cavani", "Sancho", "Shaw", "Wan-Bissaka", "Varane", "Lindelof", "Maguire", "De Gea", "Fred", "McTominay", "Dalot", "Bailly", "James", "Henderson", "Alisson", "Firmino", "Salah", "Mané", "Van Dijk", "Fabinho", "Jota", "Matip", "Robertson", "Henderson", "Thiago", "Milner", "Keita", "Alexander-Arnold", "Gomez", "Klostermann", "Upamecano", "Mukiele", "Olmo", "Sabitzer", "Nkunku", "Forsberg", "Gulacsi", "Henrichs", "Adams", "Kampl", "Orban", "Laimer", "Sørloth", "Hwang", "Mbokani", "Vanaken", "Vormer", "De Ketelaere", "Lang", "Dost", "Cuesta", "Martínez", "Tagliafico", "Alvarez", "Klaassen", "Tadic", "Berghuis", "Halland", "Reyna", "Bellingham", "Hummels", "Can", "Haaland", "Sancho", "Meunier", "Brandt", "Guerreiro", "Witsel", "Hitz", "Akanji", "Moreno", "Trigueros", "Capoue", "Yeremi Pino", "Gomez", "Chukwueze", "Foyth", "Albiol", "Pau Torres", "Pedraza", "Alcacer", "Griezmann", "Depay", "Dembele", "Lenglet", "Pique", "De Jong", "Busquets", "Roberto", "Dest", "Alba", "Neto", "Ter Stegen", "Benzema", "Hazard", "Kroos", "Modric", "Casemiro", "Asensio", "Rodrygo", "Valverde", "Vázquez", "Courtois", "Militao", "Alaba", "Carvajal", "Nacho", "Varane", "Mendy", "Marcelo", "Isco", "Vinicius Jr.", "Aouar", "Paqueta", "Depay", "Dubois", "Lopes", "Denayer", "Di María", "Neymar", "Mbappé", "Marquinhos", "Herrera", "Verratti", "Gueye", "Wijnaldum", "Navas", "Ramos", "Carvajal", "Militao", "Valverde", "Asensio", "Rodrygo", "Llorente", "Giménez", "Trippier", "Savic", "Felipe", "Lodi", "Koke", "Lemar", "Carrasco", "Luis Suarez", "João Félix", "Oblak", "Griezmann", "Pjanic", "Miralem", "De Ligt", "Alex Sandro", "Chiesa", "Cuadrado", "Morata", "Bernardeschi", "Ramsey", "Ronaldo", "Kulusevski", "Bonucci", "Szczesny", "Donnarumma", "Kessie", "Leão", "Rebic", "Tomori", "Hernandez", "Romagnoli", "Calabria", "Bennacer", "Diaz", "Tonali", "Saelemaekers", "Ibrahimovic", "Messi", "Busquets", "Pedri", "Griezmann", "Coutinho", "Araujo", "Piqué", "Roberto", "Ter Stegen", "Mingueza", "Alba", "Dest", "Lenglet", "Umtiti", "Garcia", "Neto", "Braithwaite", "De Jong", "Laporte", "Cancelo", "Dias", "Walker", "Mendy", "Foden", "Grealish", "Rodri", "De Bruyne", "Mahrez", "Bernardo", "Sterling", "Jesus", "Aguero", "Silva", "Zinchenko", "Ederson", "Ake", "Stones", "Gundogan", "Laporte", "Cancelo", "Dias", "Walker", "Mendy", "Foden", "Grealish", "Rodri", "De Bruyne", "Mahrez", "Bernardo", "Sterling", "Jesus", "Aguero", "Silva", "Zinchenko", "Ederson", "Ake", "Stones", "Gundogan", "Laporte", "Cancelo", "Dias", "Walker", "Mendy", "Foden", "Grealish", "Rodri" ];

Test runner

Ready to run.

Testing in
TestOps/sec
indexOf and lastIndexOf
const uniqueArray = players.filter(function(item) {
  return players.lastIndexOf(item) == players.indexOf(item);
});
ready
Object and Object.keys()
const obj = {};
let uniqueArray;

players.forEach((item) => {
  obj[item] = (typeof obj[item] === 'undefined')? 1 : ++obj[item];
});

uniqueArray = Object.entries(obj).filter((item) => {
  return item[1] === 1;
});

uniqueArray = Object.keys(Object.fromEntries(uniqueArray))
ready
Object and map()
const obj = {};
let uniqueArray;

players.forEach((item) => {
  obj[item] = (typeof obj[item] === 'undefined')? 1 : ++obj[item];
});

uniqueArray = Object.entries(obj).filter((item) => {
  return item[1] === 1;
}).map((item) => item[0]);
ready
Obejct and for...in
const obj = {};
let uniqueArray = [];

players.forEach((item) => {
  obj[item] = (typeof obj[item] === 'undefined')? 1 : ++obj[item];
});

for (let key in obj) {
   if (obj[key] === 1) {
      uniqueArray.push(key)
   }
}
ready

Revisions

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