2010-09-06 9 views
0

Extension une question précédente sur JavaScript et jQuery, je suis en train de faire un tableau, puis examiner, mais le tableau contient des dimensions et je ne peux pas faire les choses ..Comment réétiqueter un objet dans un tableau?

var markers = []; 
$.getJSON('GetList', "id"= + data.id, 
     function(data){ 
      $.each(data.list, function(index, data) { 
       } 
       markers.push({ 
        category:data.category, 
        id:data.id, 
        location:{ 
         latitude:data.location.latitude, 
         longitude:data.location.longitude 
        } 
       }); 
      }); 
     }); 
     return markers; 
} 

La première chose ce qui me frappe, c'est que chaque objet sera maintenant appelé "Object", alors que par défaut, je me demande toujours si elles peuvent être étiquetées à la place?

Plus bas sur la ligne, j'essaie d'accéder à l'ID pour le comparer à une sélection par l'utilisateur, mais cela ne fonctionne pas.

var selection = $(div_id).val(); 
    var arr = $.inArray(selection, markersArray.id); 
    if(arr >= 0) { 
     return search(selection, div_id); 
    } else { 
     throw("selection not found in selectionSearch()"); 
    } 

Qu'est-ce que je fais mal ici ..?

Répondre

1

Pour marquer les objets, ajouter une fonction toString, comme ceci:

  markers.push({ 
       toString: function() { return this.something; }, 
       category:data.category, 
       id:data.id, 
       location:{ 
        latitude:data.location.latitude, 
        longitude:data.location.longitude 
       } 
      }); 

Pour rechercher le tableau, vous aurez besoin de votre propre boucle.
La fonction $.inArray de jQuery recherche dans le tableau une correspondance exacte; il ne peut pas être utilisé pour trouver un objet avec une propriété correspondante.
Vous pouvez trouver un match vous, comme ceci:

for(var i = 0; i < markers.length; i++) { 
    if (markers[i].id === selection) 
     return search(selection, div_id); 
} 
throw("selection not found in selectionSearch()"); 
+0

tout d'abord - l'exemple toString contient des défauts deuxième - ne devrait pas il possible d'étiqueter tout simplement les objets après data.id et trouver avec $ (rogue entre parenthèses?). inArray? –

+0

@ M.E: 1) Fixe; Merci. 2) Non, ce n'est pas le cas. – SLaks

+0

Eh bien, cela fonctionne comme vous l'avez fait, pas d'arguments là-bas. Cependant, je suis tombé sur "a is null" avec ce qui est ... une si grande erreur ... –

0

Le type de chaque élément est l'objet, il n'y a rien d'étrange à cela. Il n'y a aucune raison d'essayer de changer cela.

Pour filtrer les éléments d'un tableau basé sur une propriété de l'élément, vous utilisez la méthode grep:

var arr = $.grep(markers, function(e){ return e.id === selection; }); 

Pour vérifier si le tableau est vide, vous ne comparez pas le tableau à un certain nombre , vous utilisez la propriété length:

if (arr.length > 0) { 
Questions connexes