L'approche fonctionnelle
Tous les jeunes branchés font de la programmation fonctionnelle ( Bonjour les utilisateurs de React ) ces jours-ci, j'ai donc pensé donner une solution fonctionnelle. À mon avis, c'est en fait beaucoup plus agréable que l'imperatif for
y each
qui ont été proposées jusqu'à présent et avec la syntaxe ES6, c'est assez élégant.
Mise à jour
Il existe désormais un excellent moyen de le faire, appelé findIndex
qui prend une fonction qui retourne true
/ false
en fonction de la correspondance de l'élément du tableau (comme toujours, vérifiez la compatibilité du navigateur).
var index = peoples.findIndex(function(person) {
return person.attr1 == "john"
});
Avec la syntaxe ES6, vous pouvez écrire ceci :
var index = peoples.findIndex(p => p.attr1 == "john");
La (vieille) approche fonctionnelle
TL;DR
Si vous êtes à la recherche de index
donde peoples[index].attr1 == "john"
utiliser :
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
Explication
Étape 1
Utilice .map()
pour obtenir un tableau de valeurs en fonction d'une clé particulière :
var values = object_array.map(function(o) { return o.your_key; });
La ligne ci-dessus vous emmène à partir d'ici :
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
Jusqu'ici :
var values = [ "bob", "john", "larry" ];
Étape 2
Maintenant, nous utilisons simplement .indexOf()
pour trouver l'index de la clé que nous voulons (qui est, bien sûr, également l'index de l'objet que nous recherchons) :
var index = values.indexOf(your_value);
Solution
Nous combinons tous ces éléments :
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
Ou, si vous préférez la syntaxe ES6 :
var index = peoples.map((o) => o.attr1).indexOf("john");
Démonstration :
var peoples = [
{ "attr1": "bob", "attr2": "pizza" },
{ "attr1": "john", "attr2": "sushi" },
{ "attr1": "larry", "attr2": "hummus" }
];
var index = peoples.map(function(o) { return o.attr1; }).indexOf("john");
console.log("index of 'john': " + index);
var index = peoples.map((o) => o.attr1).indexOf("larry");
console.log("index of 'larry': " + index);
var index = peoples.map(function(o) { return o.attr1; }).indexOf("fred");
console.log("index of 'fred': " + index);
var index = peoples.map((o) => o.attr2).indexOf("pizza");
console.log("index of 'pizza' in 'attr2': " + index);