Par exemple, j'ai:
var Data = [
{ id_list: 1, name: 'Nick', token: '312312' },
{ id_list: 2, name: 'John', token: '123123' },
]
Ensuite, je veux trier / inverser cet objet par name
exemple. Et puis je veux obtenir quelque chose comme ça:
var Data = [
{ id_list: 2, name: 'John', token: '123123' },
{ id_list: 1, name: 'Nick', token: '312312' },
]
Et maintenant, je veux connaître l'index de l'objet avec propriété name='John'
pour obtenir la valeur du jeton de propriété.
Comment puis-je résoudre le problème?
javascript
arrays
object
rsboarder
la source
la source
{Key:Value}
, je l'ai corrigé pour vous.Data
objet natif . Il s'agit simplement d'un nom de variable en majuscule, ce qui est contraire à la convention. Si quelqu'un d'autre est gêné par cela, je modifierai la question et les réponses pour corriger cette dénomination.Réponses:
Comme les autres réponses le suggèrent, faire une boucle à travers le tableau est probablement le meilleur moyen. Mais je le mettrais dans sa propre fonction, et le rendrais un peu plus abstrait:
Avec cela, vous pouvez non seulement trouver celui qui contient 'John', mais vous pouvez également trouver celui qui contient le jeton '312312':
EDIT: fonction mise à jour pour retourner -1 lorsqu'elle n'est pas trouvée, elle suit donc la même construction que Array.prototype.indexOf ()
la source
Depuis la partie de tri est déjà répondu. Je vais juste proposer une autre façon élégante d'obtenir l'indexOf d'une propriété dans votre tableau
Votre exemple est:
Tu peux faire:
Array.prototype.map
n'est pas disponible sur IE7 ou IE8. Compatibilité ES5Et le voici avec ES6 et la syntaxe des flèches, ce qui est encore plus simple:
la source
Si vous êtes d'accord avec l'utilisation d'ES6. Les tableaux ont désormais la fonction findIndex . Ce qui signifie que vous pouvez faire quelque chose comme ça:
la source
name: John
) cela ne retournera que le premier matchQui est une version simplifiée de:
De mozilla.org:
la source
token
champ au lieu duname
champ, il pourrait y avoir des problèmes, commeData[0].token == 312312
évalue àtrue
, maisData[0].token === 321321
évalue àfalse
.Si vous rencontrez des problèmes avec IE, vous pouvez utiliser la fonction map () qui est prise en charge à partir de la version 9.0:
la source
Le seul moyen connu pour moi est de parcourir tous les tableaux:
ou insensible à la casse:
Sur le résultat, la variable index contient l'index de l'objet ou -1 s'il n'est pas trouvé.
la source
une manière prototypique
la source
Vous pouvez utiliser Array.sort en utilisant une fonction personnalisée comme paramètre pour définir votre mécanisme de tri.
Dans votre exemple, cela donnerait:
La fonction de tri doit retourner soit -1 si a doit venir avant b, 1 si a doit venir après b et 0 si les deux sont égaux. C'est à vous de définir la bonne logique dans votre fonction de tri pour trier le tableau.
Edit: Vous avez manqué la dernière partie de votre question où vous voulez connaître l'index. Vous devrez parcourir le tableau pour trouver cela comme d'autres l'ont dit.
la source
Parcourez simplement votre tableau et trouvez la position:
la source
if(Data[item].name == 'John')
, je l'ai réparé pour vous.Cela pourrait être utile
Copié ceci depuis https://developer.mozilla.org/en/JavaScript/Guide/Working_with_Objects
la source
Pourquoi n'utilisez-vous pas une petite solution de contournement?
Créez un nouveau tableau avec des noms comme index. après cela, toutes les recherches utiliseront des index. Donc, une seule boucle. Après cela, vous n'avez pas besoin de parcourir tous les éléments!
http://jsbin.com/xibala/1/edit
exemple en direct.
la source
Extension de la réponse de Chris Pickett parce que dans mon cas, je devais rechercher plus profondément qu'un niveau d'attribut:
Vous pouvez passer 'attr1.attr2' dans la fonction
la source
Et ça ? :
En supposant que vous utilisez lodash ou underscorejs.
la source
Si vous avez un objet avec plusieurs objets à l'intérieur, si vous voulez savoir si certains objets sont inclus sur l'objet maître, mettez simplement find (MasterObject, 'Object to Search'), cette fonction retournera la réponse si elle existe ou non (TRUE ou FALSE ), J'espère de l'aide avec cela, peut voir l'exemple sur JSFiddle .
la source
la source
la source
Si vous souhaitez obtenir la valeur du jeton de propriété, vous pouvez également essayer ceci
où _.findKey est la fonction d'un lodash
la source
Alternativement à la réponse de German Attanasio Ruiz, vous pouvez éliminer la 2ème boucle en utilisant Array.reduce () au lieu de Array.map ();
la source
Utilisation du trait de soulignement:
la source