2012-04-05 11 views
1

Ich habe Folgendes und ich versuche herauszufinden, wie das Array von Objekten zu suchen - die call() Funktion wird mehrmals aufgerufen?jQuery Ein Array von Arrays suchen?

var arr = []; 
var newData; 

function call() { 
    newData = $('a').attr('href'); 

    if($.inArray(newData, arr) == -1) { 
     $.post('/blah', function(data) { 
      arr.push(data); 
     }); 
    } 
} 

data ist wie [object{ }] so arr[[object{id='1', myUrl=''}], [object{id='2', myUrl='' }]] wird.

Was ich versuche herauszufinden ist, ob newData in der arr enthalten ist?

+0

mm if 'arr = []' und es ohne bevölkern, Sie versuchen, '$ .inArray (newData, arr)' zu suchen, die ich denke, wird man immer wieder zurückkehren - 1 –

+0

yeah Ich möchte überprüfen, ob 'newData' im' arr' existiert - das heißt, ob es eines der 'myUrl' ist? – Andy

Antwort

1

Wenn das Array Objekte enthält, wird $.inArray nicht funktionieren. Dies liegt daran, dass Objekte nur dann gleich sind, wenn sie dasselbe Objekt sind und nicht nur die gleichen Werte enthalten.

$.inArray wird hier auch nicht funktionieren, weil newData eine Zeichenfolge ist. Es wird nicht in jedem Objekt nach dir suchen, du musst das selbst machen, mit deiner eigenen Schleife.

Etwas wie folgt aus:

newData = $('a').attr('href'); 
$.each(arr, function(){ 
    if(this.myUrl === newData){ 
     $.post('/blah', function(data) { 
      arr.push(data); 
     }); 
     return false; // break once a match is found 
    } 
}); 
+0

ah toll - das war mein prob '$ .inArray' funktioniert nicht! :) – Andy

+0

Ich bin froh, dass ich helfen konnte :-) –

+0

eine kurze Frage - die Daten kehren zurück wie '[object {id = '1', myUrl = ''}]' also scheint 'this.MyUrl' nicht zu funktionieren? Denke, dass es 'this [0] .myUrl' braucht? – Andy

0

Das Array arr enthält eine Liste von Objekten. Warum sollte newData innerhalb der arr "enthalten" sein? Sie sind zwei getrennte Variablen.

Update - Auf dieser Linie weitere Inspektion ist nicht gut:

if($.inArray(newData, arr) == -1) { 

Sie im Wesentlichen Blick sagen, sind für newData im arr (die leer ist).

Update - Hier ist ein Beispielcode, der funktionieren sollte. Hier behandle ich Daten als einfaches altes Objekt (kein Array von Objekten) mit einer Eigenschaft namens "url".

http://jsfiddle.net/nWh6N/

+0

sicher, so versuche ich zu sehen, ob 'newData' innerhalb des Arrays ist - wie' myUrl' URLs enthält und ich versuchen möchte zu sehen, ob 'newData' ist einer von diesen? – Andy

+0

gut -1 sagt nur, es ist nicht im Array - daher wird es Daten an das Array und dann, wenn es wieder aufgerufen wird, kann es suchen? Ich bin jedoch nicht sicher, wie das aktualisierte Array von Objekten wie '[[object {id = '1', myUrl = ''}], [object {id = '2', myUrl = ''}]]' zu suchen ist – Andy

+0

danke Kris für Ihre Hilfe egal :) – Andy

Verwandte Themen