8
votes

Indexof Syntaxe pour les tableaux multidimensionnels?

Quelle est la syntaxe pour indexof () pour passer via une matrice multidimensionnelle? Par exemple: xxx

je veux trouver ' a ' et faire quelque chose avec ' b '. Mais cela ne fonctionne pas ... Comme cette méthode doit être itérative elle-même, je ne présume pas d'une autre itération serait une bonne chose à faire. Actuellement, je simulez cela en utilisant 2 tableaux simples, mais je suppose que cela devrait également travailler aussi ...


2 commentaires

Essayez-vous de créer un dictionnaire? Pourquoi ne pas utiliser un objet? {}


Est-ce que l'une des quatre suggestions de codage cela fonctionne différemment pour vous? Juste curieux.


5 Réponses :


0
votes

JavaScript n'a pas de matrices multidimensionnelles en tant que telles, donc x est simplement un tableau. En outre, l'index méthode de matrice n'est pas prise en charge dans tous les navigateurs, notamment IE (jusqu'à la version 7, au moins), uniquement en cours d'introduction dans JavaScript 1.6.

Votre seule option consiste à rechercher manuellement, itérant sur x et examinant chaque élément à tour de rôle.


0 commentaires

1
votes

sauf si vous voulez conserver la commande, il est beaucoup plus simple d'utiliser un dictionnaire: xxx pré>

Vous pouvez toujours itérer sur les touches, bien que la commande soit indéfinie: P>

for (var key in x) {
   alert(x[key]);
}


1 commentaires

Utilisez X [A] au lieu de X.A. "A" n'est pas le nom de la clé, mais la variable qui détient la clé.



0
votes
x = [1,2], b = {one:function(){alert('gj')}}, c = x.push(b);

x[ x.indexOf( b ) ]['one']()

2 commentaires

Eh bien, vous avez dû le faire différemment parce que je le faisais. J'ai noté que ce seulement fonctionne sur des tableaux qui sont commandés numériquement et ont une propriété de longueur, non sur "multidimensionnels" ou dictionnaires.


Remarque - Vous devez également avoir une référence à l'objet d'origine pour la référence que vous alliez à 'B', un objet similaire avec des propriétés similaires est toujours différent.



1
votes

Vous pouvez utiliser un objet (ou un dictionnaire) comme Philippe Leybaert suggéré. Qui permettra d'accéder rapidement aux éléments: xxx pré>

mais si vous insistez sur l'utilisation de indexof code>, il y a toujours un moyen, aussi moche c'est: P>

var x = [];

var o = Object(a); // "cast" to an object
o.b = b; // attach value

x.push(o);

alert(x.indexOf(a)); // will give you the index
alert(x[1].b); // access value at given index


0 commentaires

3
votes

Simplement: indexof () code> ne fonctionne pas de cette façon. Cela pourrait fonctionner si vous avez fait quelque chose comme ceci:

Array.prototype.indexOf0 = 
  function(a){for(i=0;i<this.length;i++)if(a==this[i][0])return i;return null;};
var x = [];
// do something
x.push([a,b]);

x.indexOf0(a); //=> 0


0 commentaires