 
			
				06.10.2012, 21:06
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Матрос 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.04.2008 
					
					
					
						Сообщений: 6,246
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Упс, похоже я в первый раз таки неправильно понял задачу 
	
 
	| 
		
			Сообщение от pikko
			
		
	 | 
 
	| 
		при этом не перебирая их все ( это долго ).
	 | 
 
	
 
 Альтернатива - создание индекса. 
все остальное - лишь вариации и комбинации на тему.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 00:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 司会 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 09:08
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Матрос 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 04.04.2008 
					
					
					
						Сообщений: 6,246
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Maxmaxmахimus
			
		
	 | 
 
	| 
		Но какой индекс можно создать для всех возможных регулярок?
	 | 
 
	
 
 А нужно ли делать именно для всех? 
Вот автор уже вроде какой-то индекс себе составил, и приведенная им регулярка очень располагает к индексированию.
 
	
 
	| 
		
			Сообщение от Maxmaxmахimus
			
		
	 | 
 
	| 
		В ЛЮБОМ СЛУЧАЕ. держишь ключи в виде строк в массиве
	 | 
 
	
 
 Кроме тех случаев, когда нужен только конкретный тип регулярки) 
Например для автокомплита как раз нужно ориентироваться по ключам, и применят регулярку по первым символам
 
	
 
	| 
		
			Сообщение от Maxmaxmахimus
			
		
	 | 
 
	| 
		это моментально делается, какой нахрен индекс!
	 | 
 
	
 
 Не так уж моментально, ведь элементов у автора тысячи. 
Но если такой перебор будет проводится только один раз в ответ на действие пользователя, то да, время будет более чем приемлимо  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 14:53
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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,] 
}
 
но вообщем, я догадываюсь что это бывает только во сне    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 14:55
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 司会 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 15:49
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 sinistral 
				
				
				
				
	
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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,] 
} 
 
но вообщем, я догадываюсь что это бывает только во сне  
	 | 
 
	
 
 можно использовать обёртку, которая будет использовать бинарное дерево в качестве хранилища.
 
но легче решить эту задачу, просто убрав её    нет трёхтысячного массива - нет проблемы    (выборка нужных ключей с помощью БД, например)  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 16:03
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 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.
				
				
			
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				07.10.2012, 19:39
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 司会 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 29.02.2012 
					
					
					
						Сообщений: 198
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
		
		
		 в ишаке 8 моих функций нет, но их можно эмулировать заплатками 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |