web-dev-qa-db-fra.com

Javascript indexOf sur un tableau d'objets

si j'ai un tableau comme:

var myArray = [
                {
                    'color':'red',
                    'name': 'redName'
                },
                {
                    'color':'blue',
                    'name': 'blueName'
                },
                {
                    'color':'green',
                    'name': 'greenName'
                    },
                {
                    'color':'yellow',
                    'name': 'yellowName'
                },
             ];

Comment puis-je obtenir l'index de dire, "bleu"?

36
redconservatory
for(var i = 0; i < myArray.length; i++) {
   if(myArray[i].color === 'blue') {
     return i;
   }
}

Il n'y a pas de méthode "propre" sauf si vous souhaitez impliquer une bibliothèque tierce. Underscore est un bon pour des choses comme ça.

45
John Strickler

Si vous utilisez déjà ECMAScript 5 dans votre code, vous pouvez l'utiliser:

myArray
    .map(function (element) {return element.color;})
    .indexOf('blue');

Notez que la prise en charge de ces fonctions est assez limitée (elles ne fonctionnent pas sur Internet Explorer 8).

De plus, si vous êtes dans le futur et que vous utilisez ES6, vous pouvez le faire:

myArray.map((el) => el.color).indexOf('blue');

C'est le même que ci-dessus, mais plus petit.

45
Gustavo Rodrigues

Je sais que c'est très vieux mais Javascript es6 a une méthode géniale Array.prototype.findIndex () , vous pouvez donc faire:

let index = myArray.findIndex((item) => item.color === 'blue');
// value of index will be "1"
21

Ce n'est pas un tableau multidimensionnel (ni même un tableau dentelé, qui est utilisé à la place des tableaux multidimensionnels en Javascript, car ils n'existent pas). C'est un tableau d'objets.

Vous pouvez parcourir les éléments du tableau:

var index;
for (var i = 0; i < myArray.length; i++) {
  if (myArray[i].color == 'blue') {
    index = i;
    break;
  }
}

Maintenant, la variable index contient la valeur 1, avec votre exemple donné.

10
Guffa

Je suppose que, d'après votre exemple, vous voulez dire "1"? Voici une fonction pour vous ... 

<script type='text/javascript'>
var myArray = [
                {
                    'color':'red',
                    'name': 'redName'
                },
                {
                    'color':'blue',
                    'name': 'blueName'
                },
                {
                    'color':'green',
                    'name': 'greenName'
                    },
                {
                    'color':'yellow',
                    'name': 'yellowName'
                },
             ];
function getIndexOf(a,v) {
  var l = a.length;
  for (var k=0;k<l;k++) {
    if (a[k].color==v) {
        return k;
      }
  }                      
  return false;
}

alert (getIndexOf(myArray,'blue'));
</script>
2
Crayon Violent

Vous pouvez utiliser la méthode .findIndex ()

Dans ton cas

var findeMe = "blue";
myArray.findIndex(function(row){
return row.color == findMe;
});

J'espère que ça aide.

2
Webby

Par exemple, comme ceci:

DEMO

Array.prototype.objIndexOf = function(val) {
    var cnt =-1;
    for (var i=0, n=this.length;i<n;i++) {
      cnt++;
      for(var o in this[i]) {
        if (this[i].hasOwnProperty(o) && this[i][o]==val) return cnt;
      }
    }
    return -1;
}
var myArray = [
                {
                    'color':'red',
                    'name': 'redName'
                },
                {
                    'color':'blue',
                    'name': 'blueName'
                },
                {
                    'color':'green',
                    'name': 'greenName'
                    },
                {
                    'color':'yellow',
                    'name': 'yellowName'
                },
             ];
    alert(myArray.objIndexOf('blue'))
2
mplungjan

Parcourez le tableau en recherchant la valeur à l'intérieur de chaque objet élément. Le JavaScript brut ne vous donne pas beaucoup de choses à travailler.

0
Dave Newton