Мудрые умы могут исправить меня, но я думаю, что вам придется повторять каждый раз (с более или менее похожими скоростями), если:
Вы знаете, что собираетесь повторить поиск и что некоторые ключи будут искать чаще, чем другие. Тогда вы можете сместить коллекцию так, чтобы она не была плоской, а была предварительно отсортирована в соответствии с вашими условиями. Таким образом, ваша коллекция станет:
var groupedByType =
{"a":[{name:"scala"},{name:"test"}, {name:"erlang"}],
{"b":[{name:"abc"}],
{"c":[{name:"ruby"}]};
В качестве альтернативы вы можете попытаться запоминать доступ к своей коллекции, например, после того, как вы выполнили поиск, вы запишете условия и результаты поиска, в этом случае сохраните его в кэше заметок как
["type","a"]:[
{ name: "scala", type: "a" },
{ name: "test", type: "a" },
{ name: "erlang", type: "a" }]
Плюсы и минусы этого: очень быстро получить доступ к ранее выполненным поискам, если базовые данные не изменились таким образом, который осуждает ваш кеш. С другой стороны, это означает, что вы должны контролировать доступ к данным (в этих случаях я люблю хранить свои данные внутри замыкания, так что мне нужно только выставлять мутаторы - что-то вроде облегченного ОО, но с большей защитой), и вы может оказаться более эффективным отбрасывать ваши кэшированные данные при их изменении, чем пытаться определить дельты, в зависимости от того, как структурированы ваши данные.
Что я хотел бы подчеркнуть прежде всего, так это абсолютно убедиться, что вам нужна какая-либо оптимизация. Этот подраздел достаточно быстрый? Можете ли вы довести свое приложение до скорости другим способом? Если вы пишете клиентскую поисковую систему или что-то в этом роде, вы, вероятно, захотите пойти немного дальше, чем просто определить, какой из итераторов jQuery самый быстрый.