Клуб API Карт

Как использовать метод indexOf класса YMaps.Group?

Пост в архиве.
tzhe
11 октября 2010, 10:40
Есть GeoObjectCollection со вложенными GeoObjectCollection. У каждого вложенного GeoObjectCollection есть metaDataProperty со вложенным AnyMetaData в котором содержится мой тег route. Задача в следующем: как найти только те GeoObjectCollection в которых route совпадает с определенным значением? Думаю можно использовать метод indexOf, но не знаю как.
5 комментариев

var result = collection.filter(function(object) {


    return object.metaDataProperty.AnyMetaData.route === route;


});

Решение:

var result = collection.filter(function(object) {
    return object.metaDataProperty.AnyMetaData.route * 1 == route * 1;
}, null, true);



Пояснения: * 1, умножаем на 1, чтобы привести тип string к типу int. Параметр noRecursion равен true, чтобы не искать во вложенных GeoObject'ах, иначе выскакивает исключение: Uncaught TypeError: Cannot read property 'route' of undefined.
Возможен также вариант с помощью forEach:

var result = [];
collection.forEach(function (obj, index, group) {
    if (obj.metaDataProperty.AnyMetadata.route === route) {
        result.push(obj);   
    }                                                              
});

Но лучше, конечно, использовать метод filter() - он как раз предназначен для выборки объектов.
а можно пример с использование метода indexOf?
Метод группы indexOf не нужен для решения этой задачи, он предназначен для того, чтобы находить индекс объекта в группе.