Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.03.2018, 09:54
Аспирант
Отправить личное сообщение для Vlad777 Посмотреть профиль Найти все сообщения от Vlad777
 
Регистрация: 01.03.2018
Сообщений: 37

Как организовать поиск по csv на js
Есть csv файл:
Код:
h1,h2,h3,h4
11;Иванов;Иван;Иванович
12;Петров;Петр;Петрович
13;Васильев;Василий;Васильевич
Помогите дописать поиск по данному файлу, чтобы можно было искать или по порядковому номеру или по фамилии.

читаю файл так:
Код:
$.ajax({
    url: 'list.csv',
    dataType: 'text',
  }).done(successFunction);

function successFunction(data) {
  var allRows = data.split(/\r?\n|\r/);
  for (var singleRow = 0; singleRow < allRows.length; singleRow++) {
     var rowCells = allRows[singleRow].split(';');
   }
}
в rowCells получаю вроде как строку.

Умом понимаю, что эту строку лучше разбить на 2 массива - с порядковым номером и второй массив с фио. а затем эти оба массива push в ассоциативный массив одной строкой, а потом по ключам вести поиск, .... но вот руки отказываются писать.... знаний не хватает.
Если кто может помочь, откликнитесь плиз. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 03.03.2018, 12:23
Профессор
Отправить личное сообщение для Nexus Посмотреть профиль Найти все сообщения от Nexus
 
Регистрация: 04.12.2012
Сообщений: 3,795

var CSV=`h1,h2,h3,h4
11;Иванов;Иван;Иванович
12;Петров;Петр;Петрович
13;Васильев;Василий;Васильевич`;

function Search(CSV){
	var index={
			name:{},
			surname:{},
			patronymic:{}
		}, 
		__keys=Object.keys(index);

	this.data=CSV.split(/\n/g).slice(1).reduce(function(res,row){
		row=row.split(';');
		row=res[row[0]]={
			index:row[0],//Полагаю, что индекс уникальный и присутствует всегда
			name:(row[2]||'').trim(),
			surname:(row[1]||'').trim(),
			patronymic:(row[3]||'').trim()
		};

		__keys.forEach(function(key){
			if(!row[key])
				return;

			var f_char=row[key].charAt(0).toLowerCase();
			(index[key][f_char]||(index[key][f_char]=[])).push({
				index:row.index,
				value:row[key].toLowerCase()
			});
		});

		return res;
	},{});

	this.index=index;
};
Search.prototype.byIndex=function(index){
	return this.data[index]||null;
};
Search.prototype.byName=function(name){
	return this.__get_from(name,this.index.name);
};
Search.prototype.bySurname=function(surname){
	return this.__get_from(surname,this.index.surname);
};
Search.prototype.byPatronymic=function(patronymic){
	return this.__get_from(patronymic,this.index.patronymic);
};
Search.prototype.byString=function(string){
	var context=this,
		result=Object.keys(this.index).reduce(function(res,key){
			return res.concat(context.__get_from(string,context.index[key]));
		},[]).filter(function(item){
			return item!==null;
		});
		
	return !result?null:result;
};

Search.prototype.__get_from=function(value,from){
	value=value.toString().trim().toLowerCase();
	if(!value || !from || !from[value.charAt(0)])
		return null;
	
	var get=this.byIndex.bind(this);
	from=from[value.charAt(0)].filter(function(item){
		return item.value==value;//Тут можно изменить принцип поиска
	}).map(function(item){
		return get(item.index);
	});
	
	return !from?null:from;
};

var Get=new Search(CSV);
console.log(Get.byString('Иван'));
Ответить с цитированием
  #3 (permalink)  
Старый 03.03.2018, 12:35
Аспирант
Отправить личное сообщение для Vlad777 Посмотреть профиль Найти все сообщения от Vlad777
 
Регистрация: 01.03.2018
Сообщений: 37

Nexus,
ОГРОМНОЕ СПАСИБО! ВОПРОС РЕШЕН!
Красота да и только!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как узнать домен из js? MakTpaxep Общие вопросы Javascript 3 14.10.2016 14:22
Как создать простейший поиск на JS @Loll Общие вопросы Javascript 1 26.08.2016 09:57
Как изменить Select с помощью JS Alex921 Общие вопросы Javascript 4 04.01.2016 16:55
Как сделать выполнение одного JS после выполнения другого vita1ii Events/DOM/Window 2 11.01.2013 18:52
Как передавать параметры из php скрипта в js imissyouso Общие вопросы Javascript 3 01.08.2012 18:24