Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 06.10.2012, 21:06
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Упс, похоже я в первый раз таки неправильно понял задачу
Сообщение от pikko
при этом не перебирая их все ( это долго ).
Альтернатива - создание индекса.
все остальное - лишь вариации и комбинации на тему.
Ответить с цитированием
  #12 (permalink)  
Старый 07.10.2012, 00:55
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

Но какой индекс можно создать для всех возможных регулярок? че за бред? или я что то не пони. В ЛЮБОМ СЛУЧАЕ. держишь ключи в виде строк в массиве.

потом делаешь фильтр по этому массиву и отбираешь только те под которые подойдет регулярка. что тут сложного и долгого?
это моментально делается, какой нахрен индекс! Плюс индекс тут не сделаешь даже при желании.


function regExpFilterKeys( object, regExpFilter ) {
	return Object.keys( object ).filter( function ( key ) {
		return regExpFilter.test( key )
	} )
}

Последний раз редактировалось Maxmaxmахimus, 07.10.2012 в 01:21.
Ответить с цитированием
  #13 (permalink)  
Старый 07.10.2012, 09:08
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Сообщение от Maxmaxmахimus
Но какой индекс можно создать для всех возможных регулярок?
А нужно ли делать именно для всех?
Вот автор уже вроде какой-то индекс себе составил, и приведенная им регулярка очень располагает к индексированию.
Сообщение от Maxmaxmахimus
В ЛЮБОМ СЛУЧАЕ. держишь ключи в виде строк в массиве
Кроме тех случаев, когда нужен только конкретный тип регулярки)
Например для автокомплита как раз нужно ориентироваться по ключам, и применят регулярку по первым символам
Сообщение от Maxmaxmахimus
это моментально делается, какой нахрен индекс!
Не так уж моментально, ведь элементов у автора тысячи.
Но если такой перебор будет проводится только один раз в ответ на действие пользователя, то да, время будет более чем приемлимо
Ответить с цитированием
  #14 (permalink)  
Старый 07.10.2012, 14:53
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

я уже сам не понимаю кто из вас неправильно меня понял

допустим есть такой хеш:
h={
'аня':[4,6,7,68],
'вова':[3,,53,55],
'вася':[,3,34,344],
'ваня':[34,34,34,],
'петя':[35,5,5,45]
}

я хочу сказать как-то так:

r = h[ /^в/ ];

и получить:

r={
'вова':[3,,53,55]
'вася':[,3,34,344]
'ваня':[34,34,34,]
}

но вообщем, я догадываюсь что это бывает только во сне
Ответить с цитированием
  #15 (permalink)  
Старый 07.10.2012, 14:55
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

или с базой данных)

Сообщение от pikko
но вообщем, я догадываюсь что это бывает только во сне
тебе функцию написать что ли О_О ?


function filterKeys ( object, regExp ) {

	var filteredKeys = Object.keys( object ).filter( function ( key ) {
		return regExp.test( key )
	} );

	var obj = {};

	for ( var i = 0; i < filteredKeys.length; i++ ) {
		var key = filteredKeys[i];
		obj[key] = object[key]
	}

	return obj
}


IE > 8

Последний раз редактировалось Maxmaxmахimus, 07.10.2012 в 15:04.
Ответить с цитированием
  #16 (permalink)  
Старый 07.10.2012, 15:49
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от pikko Посмотреть сообщение
я уже сам не понимаю кто из вас неправильно меня понял

допустим есть такой хеш:
h={
'аня':[4,6,7,68],
'вова':[3,,53,55],
'вася':[,3,34,344],
'ваня':[34,34,34,],
'петя':[35,5,5,45]
}

я хочу сказать как-то так:

r = h[ /^в/ ];

и получить:

r={
'вова':[3,,53,55]
'вася':[,3,34,344]
'ваня':[34,34,34,]
}

но вообщем, я догадываюсь что это бывает только во сне
можно использовать обёртку, которая будет использовать бинарное дерево в качестве хранилища.

но легче решить эту задачу, просто убрав её нет трёхтысячного массива - нет проблемы (выборка нужных ключей с помощью БД, например)
Ответить с цитированием
  #17 (permalink)  
Старый 07.10.2012, 16:03
Аватар для pikko
Аспирант
Отправить личное сообщение для pikko Посмотреть профиль Найти все сообщения от pikko
 
Регистрация: 06.10.2012
Сообщений: 60

хм...

вообщем, я решил не строить догадки, а посмотреть на реальное время необходимое для перебора 3300 записей...

в зависимости от регекспа и количества подходящих записей время оказалось < 4ms.

это замечательно.

а сподвигло меня на эксперимент то, что я пока не совсем понимаю ооп
и я решил проверить oo вариант Maxmaxmахimus'a:
var filteredKeys = Object.keys( object ).filter( function ( key ) {
		return regExp.test( key )
	} );


vs
просто:
var filteredKeys = [];
for ( var key in object ) { if ( regExp.test( key )  ) filteredKeys.push( key )}


время одинаково.

вообщем,
всем огромное спасибо

и, да, про бинарное дерево я пока не слышал, обязательно почитаю.

Последний раз редактировалось pikko, 07.10.2012 в 16:05.
Ответить с цитированием
  #18 (permalink)  
Старый 07.10.2012, 19:39
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

в ишаке 8 моих функций нет, но их можно эмулировать заплатками
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование точки (pt) в качестве единицы измерения и их подводные камни FINoM (X)HTML/CSS 16 15.03.2012 15:26
Парсинг хеша url с выводом на странице. fayriot Общие вопросы Javascript 3 15.03.2012 10:32