2010-12-13 9 views
2

Ich versuche herauszufinden, ob es einen besseren Weg gibt, das zu tun, was ich hier mache.Suchen nach Objekten in einem Array (benutzerdefinierte Objekte mit Eigenschaften)

Ich baute ein customColumn Objekt, das einige Eigenschaften wie ID und Titel hat, etc ...

dh. my cusColum = new aColumn ('321', 'Todds Column');

Dann legen Sie alle diese Spalten in ein Array - also dieses Array enthält Objekte und keine einfachen Werte.

So mache ich das ein bestimmtes Objekt in meinem Array zu finden:

var len = columnObjects.length; 
    for (var i = 0; i < len; i++) { 
     if (columnObjects[i].colID == id) { 
      columnObjects.splice(i, 1); 
      break; 
     }  

Der Spleiß ist nur eine Sache, die ich mit diesen Objekten mache ... Ich würde gerne in der Lage sein, die IndexOf zu verwenden Funktion aber weiß nicht, wie ich es schreiben würde oder wenn es sogar möglich ist ...

+1

Hooray für die 'length' –

Antwort

2

Eine mögliche Lösung ist, ein assoziatives Array zu verwenden, um Ihre columnObjects zu speichern. Wenn das Array bevölkern würden Sie tun so etwas wie:

var columnObjects = {}; 

// your probably populating in a loop 
columnObjects['321'] = new aColumn('321', 'Todds Column'); 

Dann, wenn Sie ein Objekt von id erhalten mögen sagen Sie:

columnObjects[id]; 

Sie könnten auch das assoziative Array verwenden, um mehrere Tasten, um die Verwendung dasselbe Objekt:

var id = '321'; 
var owner = 'Todds Column'; 
var column = new aColumn(id, owner); 
columnObjects[id] = column; 
columnObjects[owner] = column; 

Es gibt ein paar andere Lösungen, die ich mir vorstellen kann, aber dies war das erste, was mir in den Sinn kam.

+0

Ok des Arrays das Caching, das klingt ziemlich genial - meine ids obwohl sind wie 'col1', 'col2' ... kann ich, dass als ID für das Array oder nur für Ints? (HA! Erste Suche nach Assoziativen gab mir diese Erklärung ... 'Assoziative Arrays geben Ihnen eine andere Möglichkeit, Informationen zu speichern. Mit assoziativen Arrays können Sie das Arrayelement, das Sie benötigen, mit einem String anstelle einer Zahl aufrufen, was oft einfacher ist erinnere dich. ') super, ich werde das versuchen - das sollte meinen Code wirklich aufräumen! –

+0

cool froh, dass es geholfen hat, würde ein upvote schätzen und wenn dies Ihre Frage beantwortet, können Sie es als beantwortet markieren, indem Sie auf das große Häkchen klicken. Und ja, Sie können Dinge wie col1 col2 für Ihre Indexwerte verwenden. – Zevan

0

könnten Sie verwenden Linq

var objectsFound = Enumerable.From(columnObjects).Where(function (x) { 
        return x.colID === id}).FirstOrDefault(null); 

if (objectsFound) 
    do something.... 
Verwandte Themen