Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Поиск в массиве через JavaScript (https://javascript.ru/forum/misc/1544-poisk-v-massive-cherez-javascript.html)

Noran 10.08.2008 17:31

Поиск в массиве через JavaScript
 
Здраствуйте ! Я абсолютный новичок (ноль) в JavaScript. Мне нужно организовать поиск в массиве(вах) данных по словам. У меня есть скрипт, но он ищет только по первым словам в данных, чуствителен к регистру и не может найти и отобразить несколько результатов поиска по категориям. Категории описаны начиная с var iNumber = 1; Если кому-нибудь не сложно, поправьте скрипт или хотя бы подскажите что изменить чтобы реализовать: поиск и отображение нескольких результатов, поиск по любому слову и не чуствительность к регистру (не обязательно). Вот тот самый скрипт:
<script language="JavaScript">
<!-- 
function createArray(length)
{
 this.length = length;
 for( var i = 1; i<= length; i++)
  this[i] = null;
 return this;  
}
//  ********************** Some Preparation Data ******************************************

var Entries = 5; // Количество записей в базе данных
var Separator = ";" // Разделитель для элементов данных
var Fields = 5; // Количество данных по одному письму
var iNumber = 1;
var iDate = 2;
var iTitle = 3;
var iSender = 4;
var iTarget = 5;

//  *********************** Now create the Array *******************************************

var Data = new createArray(Entries);

//  *********************** Type in your Data below *****************************************

Data[1] = "1;09.06.2006;Ответы на вопросы для ОАО ПИ 'Синтез ПАВ';ОАО ПИ 'Синтез ПАВ';Мельник Г.В. Вамбольдт Ю.А.";
Data[2] = "";  // Под Дата1 пример организации данных для поиска. В остальных блоках будут подобные данные.
Data[3] = "";
Data[4] = "";
Data[5] = "";

//  ********************** End of Data Block **********************************************
//  ********************* Begin Common functions *****************************************

var LastMatch = 0; // Store Last Matched Data Index
function GetField(Entry,number) // Count begins with 1, f.e. GetField(Data[1] ,1) returns Walkowiak
{
 var Out = "";
 var FirstChar;
 var LastChar;

 FirstChar = 0;
 LastChar = Entry.indexOf(Separator) ;
 if (number == 1) 
 {
  Out += Entry.substring(FirstChar,LastChar); 
  return Out;
 }
 if (number == Fields)
 {
  Out+= Entry.substring(Entry.lastIndexOf(Separator) + 1,Entry.length)
  return Out;
 }

 for(var i =2; i <= number; i++)
 {
  FirstChar = LastChar + 1;
  LastChar = Entry.indexOf(Separator, FirstChar);
 }
 Out += Entry.substring(FirstChar,LastChar); 
 return Out;
}

function FindNext(String, number) // number is the number of the field to search in
{ 
 var CompareWith = "";
 for(var i = LastMatch + 1; i <=Data.length; i++)
 {
  var buf = GetField(Data[i],number);
  var bl = parseInt(buf.length);
  var sl = parseInt(String.length);
  if(bl > sl)
  {
  CompareWith = buf.substring(0,sl );
  } 
  else
  {
   CompareWith = buf;
  }
  if (CompareWith == String)
  {
   LastMatch = i;
   return i;
  }
 }
 LastMatch = 0;
 return 0; 
}

// ******************************* Custom functions for this document********************************
function ResetSearch()
{
 LastMatch = 0;
 for(var i = 1; i <=Fields; i++)
 {
  document.SearchForm.elements[i+3].value = "";
 }
}



function TypeNext()
{
 var SearchString = document.SearchForm.Text.value;
 var index =document.SearchForm.elements[3].options.selectedIndex + 1;
 var j = FindNext(SearchString, index);
 if (j == 0)
 {
  alert("Достигнут конец списка, элемент не обнаружен ! \nНажмите 'Сброс' чтобы запустить поиск с начала списка.");
  ResetSearch();
  return;
 }
 var buf = "";
 for(var i = 1; i <=Fields; i++)
 {
  buf = GetField(Data[j],i);
  document.SearchForm.elements[i+3].value = buf;
 }
}

// -->
</script>

P.s. Я не собираюсь извлекать из него коммерческую выгоду, только упростить жизнь людям в виде поиска по данным.


Часовой пояс GMT +3, время: 22:42.