47 votes

Trouver un objet par sa propriété dans un tableau d'objets à la manière d'AngularJS

J'ai un tableau comme ci-dessous

var myArray = [{'id':'73','name':'john'},{'id':'45','name':'Jass'}, etc.]

Maintenant, j'ai un id 73 comment sélectionner cet objet particulier dans le tableau. Je vois que je peux faire cela dans jQuery facilement avec grep Y a-t-il un voie angulaire de faire ça ?

Puisque la plupart des utilisateurs qui développent des applications avec angular obtiennent toujours des données à partir de tableaux d'objets (principalement pour les tableaux), il devrait y avoir une fonction d'aide pour cela ?

Ainsi, je peux changer les données de la ligne avec l'ID de la ligne en mettant à jour le tableau de l'objet.

Je ne veux pas lier cela dans la vue. Je veux manipuler les données et les mettre à jour avec la fonction.

Par exemple. J'ai une liste de tableaux. Si l'utilisateur final modifie une ligne du tableau, j'ai l'ID de l'objet. Ainsi, après que l'utilisateur final a appuyé sur le bouton "Enregistrer", je dois mettre à jour le tableau, puis revenir à la liste du tableau.

0 votes

@JaredSmith Je cherche n'importe quelle fonction d'aide angulaire (comme angular.isNumber) pour cela, pas les méthodes d'objet de tableau par défaut de javascript.

1 votes

Cela n'a aucun sens. Pourquoi auriez-vous besoin d'une fonction d'aide pour remplacer une méthode native supportée jusqu'à IE 9 ? À moins que vous ne donniez une raison différente, cela apparaît comme un problème XY. meta.stackexchange.com/questions/66377/qu'est-ce que c'est, le problème de l'oxy ? .

0 votes

Je peux comprendre pourquoi vous ne voulez pas inclure jquery si vous utilisez déjà angular, mais .filter est à la fois natif et bien supporté. Si vous pouvez donner une raison convaincante pour laquelle angular, et angular seul, debe soit utilisé pour résoudre ce problème, je retire le vote serré.

81voto

M B Points 1870

Vous pouvez utiliser la fonction filter https://docs.angularjs.org/api/ng/filter/filter

dans votre contrôleur :

$filter('filter')(myArray, {'id':73}) 

ou dans votre HTML

{{ myArray | filter : {'id':73} }}

0 votes

Merci +1 Je pensais appliquer le filtre seulement en mode vue avec le markup, merci pour l'idée de l'utiliser dans le contrôleur aussi.

5 votes

Juste une note aux camarades d'apprentissage, nous devons passer $filter dans notre contrôleur afin d'utiliser cette méthode.

20 votes

Il convient de noter que le code ci-dessus filtrera sur la base de l'ID qui est une sous-chaîne. Ainsi, en filtrant sur un ID de 73, on trouvera également 733, 4573, 173, etc. Pour obtenir une comparaison stricte, vous devez passer un troisième paramètre de comparaison de 'true' comme indiqué dans la documentation.

45voto

Timo Points 22864

Et pourquoi pas du simple JavaScript ? En savoir plus Array.prototype.filter() .

var myArray = [{'id': '73', 'name': 'john'}, {'id': '45', 'name': 'Jass'}]

var item73 = myArray.filter(function(item) {
  return item.id === '73';
})[0];

// even nicer with ES6 arrow functions:
// var item73 = myArray.filter(i => i.id === '73')[0];

console.log(item73); // {"id": "73", "name": "john"}

0 votes

Merci +1 pour l'aide. J'ai déjà vu la méthode de filtrage JavaScript, je cherchais la méthode angulaire.

0 votes

Que diriez-vous d'utiliser FIND à la place ?

0 votes

@Dementic find était encore assez récent dans Chrome lorsque la réponse a été rédigée, et n'est par exemple pas du tout disponible dans IE. filter d'autre part.

11voto

David Corral Points 1500

Pour l'ensemble des M B Si vous voulez accéder à un attribut spécifique de cet objet déjà filtré du tableau dans votre HTML, vous devrez le faire de cette manière :

{{ (myArray | filter : {'id':73})[0].name }}

Donc, dans ce cas, il imprimera john dans le HTML.

Salutations !

1voto

La solution qui fonctionne pour moi est la suivante

$filter('filter')(data, {'id':10})

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X