2010-12-13 3 views
2

Я пытаюсь выяснить, есть ли лучший способ делать то, что я здесь делаю.Поиск объектов в массиве (пользовательские объекты со свойствами)

Я построил объект customColumn, который имеет некоторые свойства, такие как ID и название, и т.д ...

т.е.. my cusColum = новый aColumn ('321', 'Todds Column');

Затем поместите все эти столбцы в массив - так что этот массив содержит объекты, а не простые значения.

Так что я делаю это, чтобы найти определенный объект в моем массиве:

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

Сращивание только одна вещь, которую я делаю с этими объектами ... Я хотел бы быть в состоянии использовать IndexOf но не знаю, как я это написал бы, или если это возможно ...

+1

Hooray для кэширования в буях 'length' –

ответ

2

Одним из возможных решений является использование ассоциативного массива для хранения объектов columnObjects. При заполнении массива вы могли бы сделать что-то вроде:

var columnObjects = {}; 

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

Затем, когда вы хотите получить объект по идентификатору вы говорите:

columnObjects[id]; 

Вы можете также использовать ассоциативный массив, необходимо использовать несколько ключей к тот же объект:

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

Есть несколько других решений, о которых я могу думать, но это было первое, что пришло в голову.

+0

Хорошо, что звучит довольно удивительным - мои идентификаторы, хотя, как«col1»,«col2»... я могу использовать это как идентификатор только для массива или ints? (HA! Первый поиск ассоциаций дал мне это объяснение ... «Ассоциативные массивы дают вам другой способ хранения информации. Используя ассоциативные массивы, вы можете вызвать необходимый элемент массива, используя строку, а не число, что часто бывает проще помните. ') Удивительно, я попробую это - это должно действительно очистить мой код! –

+0

классно рад, что он помог, по достоинству оценил бы upvote, и если это ответит на ваш вопрос, вы можете отметить его как ответ, нажав на большую галочку. И да, вы можете использовать такие вещи, как col1 col2 для ваших значений индекса. – Zevan

0

Вы можете использовать Linq

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

if (objectsFound) 
    do something.... 
Смежные вопросы