J'ai un tableau contenant des doublons Je veux vous débarrasser des duplicats (insensible au cas insensible) et créer un nouveau tableau qui compte les doublons. p> dans l'une des réponses, j'ai vu cette fonction: p> qui renvoie deux tableaux: p> Il n'est pas insensible à la casse, je veux toute instance de Y a-t-il également un meilleur moyen de le faire pour les grandes tableaux? Par exemple, une longueur de matrice de 10k? p> p> String 1, String 1, String 1, String 1 Code> Pour être considéré comme
String 1 P>. P>.
5 Réponses :
p> .sort () code> est un
O (n log n) code> processus - si vous besoin em> pour trier les résultats, le faire à la très fin, si la vitesse est quelque chose que vous êtes inquiet. Si vous ne doit pas em> besoin de trier les résultats, utilisez un
SET code> (ou une carte
code>) plutôt pour vérifier les doublons, au lieu de vérifier une matrice triée pour des éléments similaires dans des indices adjacents.
array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"]
function count_array(arr) {
const result = [];
const map = new Map();
for (let i = 0, { length } = arr; i < length; i++) {
const str = arr[i];
const lower = str.toLowerCase();
const currCount = map.get(lower) || 0;
if (!currCount) {
result.push(str);
}
map.set(lower, currCount + 1);
}
console.log([...map.values()]);
return result.sort();
}
console.log(count_array(array));
Merci pour l'explication approfondie, votre réponse ne compte pas les articles? Je veux obtenir un deuxième tableau correspondant au nombre de doublons de la matrice 1
Oh, vous vouliez aussi les comptes, utilisez une carte code> au lieu d'un ensemble pour garder la piste
Est-il possible de les obtenir dans deux tableaux distincts? J'utilise les matrices de retour dans une autre fonction qui accepte deux tableaux différents
Prenez simplement le deuxième élément de chaque tableau sur la carte pour obtenir les comptes correspondants à chaque chaîne.
Réduisez la matrice de chaînes à un objet, en utilisant les chaînes comme des clés et le nombre d'apparences en tant que valeurs. Utilisez p> objet.keys () code> pour obtenir le premier tableau et
objet.values () code> pour seconde:
const array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"]
const counts = Object.entries(array.reduce((r, s) => {
const key = s[0].toUpperCase() + s.substring(1).toLowerCase();
r[key] = (r[key] || 0) + 1;
return r;
}, {}))
.sort(([, a], [, b]) => b - a);
const first = counts.map(([s]) => s);
const second = counts.map(([, n]) => n);
console.log(first);
console.log(second);
Je pense que objet.keys code> est
o (n) code> donc je ne suis donc pas sûr de la performance sur les grandes tableaux?
Puisque vous avez besoin d'un tableau de n code> éléments -
o (n) code> est assez bon.
Merci, dans votre réponse, est-il possible de commander du plus grand nombre de comptes en double au plus bas?
Voir les mises à jour. NOTE - La complexité de array.sort () code> est
O (n journal (n)) code>
Vous pouvez prendre quelques fonctions et filtrer des valeurs noramlisées avec les compter.
p>
const normalize = s => s.toLowerCase(), mapCount = (m, k) => m.set(k, (m.get(k) || 0) + 1), array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"], map = array.reduce((m, v) => mapCount(m, normalize(v)), new Map), array1 = Array.from(map.keys()), array2 = Array.from(map.values()); console.log(array1); console.log(array2);
Si vous demandez au moyen le plus rapide de le faire, il devrait être fait dans Il peut être mis en œuvre comme: p> Big-O (N) Code> Asymptotiquement:
Ceci peut être fait succinctement à l'aide de p> array.reduce code> pour créer une carte dont les touches sont les éléments mocassés de votre tableau et que les valeurs sont leur comptage. Ensuite, obtenez les éléments uniques à l'aide de
objet.keys () code> et obtenez les comptes avec
objet.values () code>:
const array = ["String 1", "string 2", "STRING 1", "String 2", "String 3", "String 1"];
const map = array.reduce((acc, x) => {
const xLower = x.toLocaleLowerCase();
acc[xLower] = (acc[xLower] || 0) + 1;
return acc;
}, {});
console.log(map);
console.log(Object.keys(map));
console.log(Object.values(map));