Moyen efficace de parcourir un tableau d'objets dans javascript/node.js
J'ai défini un objet
var Person = function(name,age,group){
this.name = name,
this.age = age,
this.group = group
}
var ArrPerson = [];
ArrPerson.push(new Person("john",12,"M1"));
ArrPerson.push(new Person("sam",2,"M0"));
Maintenant, j'ai besoin d'un mécanisme efficace pour identifier si le tableau d'objets ArrPerson contient un nom particulier ou pas?
Je sais que nous pouvons parcourir le tableau à l'aide de la boucle et de vérifier.En supposant que le tableau est énorme,est-il un autre moyen efficace de faire cela?
- vous êtes à la recherche uniquement pour
name
ou d'autres propriétés? - Thomas a le droit - si l'efficacité est le premier critère que vous ne devriez pas être à l'aide d'un simple tableau.
- Si vous avez seulement une (non triés) de tableau, il n'y a pas grand chose d'autre que vous pouvez faire, mais pour le parcourir.
- La régulière pour la boucle sera le moyen le plus rapide. Aussi, si vous avez juste besoin d'un élément, vous serait en mesure de briser la boucle
- J'ai besoin de vérifier d'abord sur le nom et si le nom correspond à j'ai besoin de récupérer l'âge et le groupe.
Vous devez vous connecter pour publier un commentaire.
Exemple : filtre , une carte, de réduire les etc. les méthodes d'itérer sur chaque élément ou un objet dans un tableau,
forEach
: aussi itère sur chaque élément/objet dans un tableauLa question, a déclaré énorme tableau,
native for loop
est plus rapide que tout ce qui précède la mise en cache et la longueur peut améliorer par quelques ms (millisecondes).https://jsperf.com/native-map-versus-array-looping
Vous pouvez utiliser le tableau de filtre ou de trouver des méthodes
La méthode find recherche le tableau dès le début, et s'arrête quand trouver un élément qui correspond.Dans le pire des cas où l'élément qui est recherché est la dernière dans le tableau ou il n'est pas présent, cette méthode ne O(n).Cela signifie que cette méthode ne n contrôles (n comme la longueur du tableau) jusqu'à ce qu'il s'arrête.
La méthode du filtre de toujours faire en O(n) car à chaque fois qu'il va chercher l'ensemble du tableau pour trouver chaque élément qui correspond à.
Bien que vous pouvez faire quelque chose de beaucoup plus rapide(en théorie) par la création d'une nouvelle stucture.Exemple:
Ce ES6 Carte permettra de garder un index de l'ensemble du tableau basé sur les noms qu'il contient.Et si vous voulez voir si votre tableau contient un nom que vous pouvez faire:
Cette approche permettra de faire O(1).Seul un chèque dans la carte pour voir si ce nom existe dans votre tableau.Vous pouvez également suivre les indices de tableau à l'intérieur de la carte:
Avec cette approche, non seulement vous pouvez savoir si il y a une personne dans le tableau avec le nom spécifique, mais vous pouvez également trouver de l'ensemble de l'objet avec O(1).
Prendre en compte le fait que cette carte sera seul indice gens par leur nom, si vous voulez un autre critiria vous avez besoin d'une autre carte.Aussi garder deux structures de données synchronisé n'est pas facile(de la suppression d'un élément de tableau devrait également être supprimé de la carte,etc)
En conclusion, comme toujours, l'augmentation de la vitesse se termine sacrifier quelque chose d'autre, de la mémoire et la complexité de code dans notre exemple.
Considérant que vous souhaitez vérifier tous et en supposant qu'aucun autre de l'indexation, puis le problème est toujours en O(n). Vous pouvez utiliser .filtre() pour filtrer et retourne un tableau où ils satisfont à cette condition. Alternativement, vous pouvez l'index de l'aide d'une autre structure de données et ce que vous voulez de recherche.
JS:
Quelque chose comme cela devrait fonctionner.
JS: