Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.03.2013, 12:04
Интересующийся
Отправить личное сообщение для Kowabunga! Посмотреть профиль Найти все сообщения от Kowabunga!
 
Регистрация: 01.03.2013
Сообщений: 11

Поиск по json
Имеется вот такой вот js, в котором много много групп, условно именуемых цифрами. (например от 10 до 10000).
в каждой есть подгруппа, ещё подгруппа и т.д.
'110' : {
			'name' : 'первый',
			'id' : '110',
			'image' : 'флешка.swf',
			'columns' : '2',
			'rows' : '5',
			'op5' : {
				'name' : '1.1',
				'id' : '21271',
				'image' : 'картинка.gif',
				'visible' : '1'
			},
			'op6' : {
				'name' : '1,2',
				'id' : '20952',
				'image' : 'картинка.gif',
				'visible' : '1'
			}
		},
'10000' : {
			'name' : 'два',
			'id' : '10000',
			'image' : 'гиф.gif',
			'columns' : '2',
			'rows' : '5',
			'101' : {
				'name' : '2,1',
				'id' : '101',
				'image' : 'гиф.gif',
				'titleimage' : 'гиф.gif',
				'columns' : '4',
				'rows' : '5',
				'op6' : {
					'name' : '2,3',
					'id' : '20005',
					'image' : 'гиф.gif',
					'visible' : '1',
					'conent_images' : 'logo_2.gif,logo_3.gif,logo_4.gif,logo_flyer.gif'


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

function createSearchIndex(groupID)
	{
		var result = {};

		if(groupID)
			result = reqursiveSearch($menu[0][groupID], groupID);
		else
		{
			for(var k in $menu[0])
				result = concatObjects(result, reqursiveSearch($menu[0][k], k));
		}
		
		return result;
	}

	function reqursiveSearch(obj, parentKey)
	{
		var result = {};

		for(var i in obj)
			if(typeof obj[i] == 'object' && i != 'parent')
				result = concatObjects(result, reqursiveSearch(obj[i], i));
			else if(i == 'id' && parentKey.indexOf('op') != -1)
				result[obj[i]] = obj;

		return result;
	}

	function concatObjects()
	{
		var l = arguments.length;

		if(l < 2)
			return false;

		var i, k, result = arguments[0];

		for(i = 1; i < l; i++)
		{
			if(typeof arguments[i] == 'object')
				for(k in arguments[i])
					result[k] = arguments[i][k];
		}

		return result;
	}



а, ну и сам поиск
function search()
	{
		if(__cache[query])
			return __cache[query];

		var result = {};

		var qString = query.replace(/[\s]{2,}/gim, ' ');
		qString = qString.replace(/^[\s]+|[\s]+$/g, '');
		qString = getKeywords(qString);
		qString = qString.replace(/[\s]+/g, '(?:\\s+|-)');

		/**
		 * Поиск по двум регулярным выражениям. Первая для русского, вторая для транслита
		 */
		var cacheObj = getCacheObj();
		for(var k in cacheObj)
		{
			if(new RegExp('((?:\\s+|^|-)' + qString + '[^\\s]*)', 'mgi').test(searchIndex[k]['name']) ||
					new RegExp('((?:\\s+|^|-)' + trans(qString) + '[^\\s]*)', 'mgi').test(searchIndex[k]['name']))
				result[k] = cacheObj[k];
		}


		if(query.length > 0)
			__cache[query] = result;

		purgeCache();

		return result;
	}
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка JSON данных в цикле Fareastaz jQuery 12 15.03.2013 20:20
Проблемы с jqGrid и JSON massacra_panda Библиотеки/Тулкиты/Фреймворки 1 08.10.2012 16:44
json данные не грузятся в windows XP но грузятся в w7 rustamaha Элементы интерфейса 2 28.11.2011 12:35
JSON или JSONP для запросов на другой сервер? Метод GET, для длинных сообщений? Kotakota jQuery 5 23.08.2011 23:12
jQuery. Обработка ошибок и JSON. mma_mma jQuery 3 19.07.2010 12:10