Suppression des valeurs en double des tableaux en JavaScript
Avez-vous affaire à un tableau pouvant contenir des doublons et devez-vous créer un nouveau tableau avec seulement les valeurs uniques ? Voici un guide complet avec plusieurs approches pour résoudre ce problème courant.
TL;DR : Utilisation de la syntaxe ES6 Set and Spread
const uniq = [...new Set(array)];
"Smart" mais approche naïve (temps quadratique)
const uniqueArray = a.filter((item, pos) => a.indexOf(item) === pos);
Les tables de hachage à la rescousse (Temps linéaire)
const uniq = (a) => { const seen = {}; return a.filter((item) => { return seen.hasOwnProperty(item) ? false : (seen[item] = true); }); };
Le meilleur des deux mondes (Temps linéaire)
const uniq = (a) => { const prims = { boolean: {}, number: {}, string: {} }, objs = []; return a.filter((item) => { const type = typeof item; if (type in prims) { return prims[type].hasOwnProperty(item) ? false : (prims[type][item] = true); } else { return objs.indexOf(item) >= 0 ? false : objs.push(item); } }); };
Trier et filtrer (Temps linéaire)
const uniq = (a) => { return a.sort().filter((item, pos, ary) => !pos || item !== ary[pos - 1]); };
Unique par clé (filtrage basé sur un Rappel)
const uniqBy = (a, key) => { const seen = {}; return a.filter((item) => { const k = key(item); return seen.hasOwnProperty(k) ? false : (seen[k] = true); }) };
Préserver la première ou la dernière occurrence (à l'aide d'un ensemble ou d'une carte)
const uniqByKeepFirst = (a, key) => { const seen = new Set(); return a.filter((item) => { const k = key(item); return seen.has(k) ? false : seen.add(k); }); }; const uniqByKeepLast = (a, key) => { return [...new Map(a.map((x) => [key(x), x]))].values(); };
Choisissez l'approche qui correspond à votre type de tableau et les exigences de performance.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!